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!
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")
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.
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.
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")
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")