webForumDet fria alternativet
Logga in / Bli medlem

Avancerad select

Databaser & SQL

12 svar · 189 visningar · startad av aleborg

Medlem sedan jan. 20013 341 inlägg
Frågan#1

Jag läste här på forumet någonstans att man kunde köra en select sats i en select sats, jag sökte i forumet på (select och upptäckte att det finns en bugg i sökfunktionen här :e fick bara en vit sida!

MEN över till mitt problem...
Jag håller på med sök funktionen till ett forum, databasen ser ut ungefär så här:

DevTopics
--TopicID
--Title
--Message
--ReplyTo - om inlägget är ett svar så finns ID numret till det inlägg det är svar till annars null

SQL1="Select * From DevTopics Where "& Session("Field") &" Like '%"& Session("Search") &"%' And ReplyTo IS NULL Order By "& Session("sort3")

Så får jag fram alla "huvudinlägg" som innehåller sökningen, men om jag även vill inkludera "huvudinläggen" till dom svar som innehåller sökningen. hur gör jag då? Jag vill alltså inte ha fram svaren utan det inlägget svaret tillhör!

Har jag rört till det nu?

Medlem sedan jan. 20013 341 inlägg
#2

Typ nått sånt här:

SQL1="Select * From DevTopics Where "& Session("Field") &" Like '%"& Session("Search") &"%' And ReplyTo IS NULL AND ReplyTo IN (Select * From DevTopics Where "& Session("Field") &" Like '%"& Session("Search") &"%' And ReplyTo >0) Order By "& Session("sort3")

Men tyvärr funkade det inte :(

Medlem sedan jan. 20013 341 inlägg
#3

Försökte även med det här:

SQL1="Select * From DevTopics Where "& Session("Field") &" Like '%"& Session("Search") &"%' And ReplyTo IS NULL Union All Select [ReplyTo] From [DevTopics] Where ["& Session("Field") &"] Like '%"& Session("Search") &"%' And [ReplyTo] >0 Order By "& Session("sort3")

och fick samma fel:
Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another.

Medlem sedan dec. 200012 464 inlägg
#4
SQL1="Select * " & _
     "  From DevTopics " & _
     " Where ReplyTo IS NULL " & _
     "   AND TopicId in (Select replyto " &_
     "   From DevTopics " & _
     "  Where "& Session("Field") &" Like '%"& Session("Search") &"%' " &_
     "    And ReplyTo >0) " & _
    " Order By "& Session("sort3")
Medlem sedan dec. 200012 464 inlägg
#5

Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another.

brukar vara ett fel i ADO, dvs innan man kommer till databasen. Det är förmodligen något fel i din VB-skriptkod.

Medlem sedan dec. 19996 721 inlägg
#6
SQL1="Select * From DevTopics Where (" & Session("Field") & " LIKE '%"& Session("Search") &"%' And ReplyTo IS NULL) OR [b]ID[/b] IN (Select ReplyTo From DevTopics Where " & Session("Field") & " LIKE '%" & Session("Search") & "%' AND ReplyTo >0) ORDER BY " & Session("sort3")

Vad var fel förut?

Jo..på den första varianten..

And ReplyTo IS NULL AND ReplyTo IN (Select * From DevTopics

ReplyTo kan inte både vara NULL och samtidigt ingå i en IN-lista. Dessutom får en IN-lista endast returnera en kolumn, så man kan inte använda SELECT *

Den andra...

När man kör UNION måste båda SELECT-satserna returnera exakt lika många kolumner, i rätt ordning, av rätt datatyp.

Medlem sedan jan. 20013 341 inlägg
#7

Haft samma fel på båda varianterna!
Och skäms, hade glömt ändra Conn.open så att den körde igång rätt SQL sats :r

Men din kod funkade emission, TACK

Medlem sedan jan. 20013 341 inlägg
#8

Där emot så på den här SQL satsen plockar den fram alla svaren också istället för inlägget som svaret tillhör :(

SQL1="Select DevTopics.* From DevTopics Join Users On Who = UserID Where (DevTopics.Title Like '%"& Session("Search") &"%' Or DevTopics.Message Like '%"& Session("Search") &"%' Or Users.Name Like '%"& Session("Search") &"%' And ReplyTo IS NULL) OR TopicID IN (Select DevTopics.ReplyTo From DevTopics Join Users On Who = UserID Where (DevTopics.Title Like '%"& Session("Search") &"%' Or DevTopics.Message Like '%"& Session("Search") &"%' Or Users.Name Like '%"& Session("Search") &"%' And ReplyTo >0)) Order By "& Session("sort3")

Vad är fel?

Medlem sedan dec. 200012 464 inlägg
#9

Kanske lite extra parenteser

SQL1="Select DevTopics.* From DevTopics Join Users On Who = UserID Where ((DevTopics.Title Like '%"& Session("Search") &"%' Or DevTopics.Message Like '%"& Session("Search") &"%' Or Users.Name Like '%"& Session("Search") &"%') And ReplyTo IS NULL) OR TopicID IN (Select DevTopics.ReplyTo From DevTopics Join Users On Who = UserID Where (DevTopics.Title Like '%"& Session("Search") &"%' Or DevTopics.Message Like '%"& Session("Search") &"%' Or Users.Name Like '%"& Session("Search") &"%' And ReplyTo >0)) Order By "& Session("sort3")
Medlem sedan jan. 20013 341 inlägg
#10

Tack ni e guld allihopa :e

Medlem sedan jan. 20013 341 inlägg
#11

hur får jag fram antal träffar på dom här kriterierna?

Medlem sedan dec. 200012 464 inlägg
#12

Om du använder ASP så är det enklsate sättet att plocka upp alla rader med getrow

sql1 = "..."
set rs = conn.execute(sql1)
if rs.eof then
  cnt = 0
else
  arr = rs.getrows()
  cnt = ubound(arr,2) + 1
end if
Medlem sedan jan. 20013 341 inlägg
#13

tack :D

274 ms totalt · 4 externa anrop · v20260731065814-full.5386d3bf
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
140 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)