SalamanaMedlem sedan mars 2005158 inlägg Hej... Sitter med ett problem som jag inte riktigt förstår. Jag har en sökfunktion med bland annat ett x-antal kryssrutor. Kör jag med "Or e.extraID= 2 " så listar den som den ska. Men byter jag ut "Or" till And "And e.extraID= 2 " så listar den inget. Hur ska jag få den att lista med vilkoret "And".
Kod 1 listar ...men Kod 2 listar ej!
KOD 1
Select distinct r.restID, r.restNamn, r.menyTyp from tbl_resturang AS r INNER JOIN tbl_kategori AS k ON r.restID=k.restID INNER JOIN tbl_extra AS e ON r.restID=e.restID Where k.katID>0 AND r.restNamn LIKE '%%' AND (e.extraID=1 Or e.extraID= 2 Or e.extraID= 3 Or e.extraID= 4 Or e.extraID= 8 Or e.extraID= 7) And r.aktiv = 1 And r.stadID = 68;
KOD 2
Select distinct r.restID, r.restNamn, r.menyTyp from tbl_resturang AS r INNER JOIN tbl_kategori AS k ON r.restID=k.restID INNER JOIN tbl_extra AS e ON r.restID=e.restID Where k.katID>0 AND r.restNamn LIKE '%%' AND (e.extraID=1 And e.extraID= 2 And e.extraID= 3 And e.extraID= 4 And e.extraID= 8 And e.extraID= 7) And r.aktiv = 1 And r.stadID = 68;
Tack på förhand!
LarsGMedlem sedan dec. 200012 464 inlägg Select restID, restNamn, menyTyp
from tbl_resturang AS r
where restid in
(select restid
from kategori
where katid > 0)
and aktiv = 1
and stadID = 68
and restnamn like '%%'
and exists
(select 1
from tbl_extra
where r.restID = e.restID
AND e.extraID in (1,2,3,4,8,7)
group by e.restid
having count(*) = 6)
Flyttas från ASP
SalamanaMedlem sedan mars 2005158 inlägg Sökningen görs i fyra tabeller ..därav anledningen till att jag gör en INNER JOIN.
e.extraID är variabeln för en kryssruta och är helt dynamisk...kan alltså vara oändligt många sådana. När jag kört me "OR" i sql-frågan så listar den upp x-antal träffar..vilket är helt rätt. Men nu måste jag köra med "And" i sql-frågan...för att EN träff måste uppfylla alla rutor man kryssat i för att visas...men det blir inte rätt...den listar inte en enda träff...och det finns data i databasen som uppfyller kriterierna för min fråga..men det enda jag ändrat är från "Or" till "And"...så jag vore tacksam om ngn visade hur jag ska göra för att kunna köra med "And" i sql-frågan istället för "Or"
emissionMedlem sedan dec. 19996 721 inlägg
Salamana skrev:
...så jag vore tacksam om ngn visade hur jag ska göra för att kunna köra med "And" i sql-frågan istället för "Or"
LarsG har visat det i koden ovan.. :)
Har du provat den? Den innehåller i praktiken samma INNER JOIN som du vill ha, även om den byggts upp annorlunda.
Anledningen till att ditt exempel inte fungerar är att "e.extraID=1 And e.extraID= 2 And e.extraID= 3 And e.extraID= 4 And e.extraID= 8 And e.extraID= 7" kräver att e.extraId är 1 och 2 osv samtidigt, dvs. på samma rad i databasen, och det kan den ju inte vara. Alternativet till LarsGs lösning är att INNER JOIN:a flera gånger.
Select distinct r.restID, r.restNamn, r.menyTyp from tbl_resturang AS r
INNER JOIN tbl_kategori AS k ON r.restID=k.restID
INNER JOIN tbl_extra AS e1 ON (r.restID=e1.restID AND e1.extraID=1)
INNER JOIN tbl_extra AS e2 ON (r.restID=e2.restID AND e2.extraID=2)
INNER JOIN tbl_extra AS e3 ON (r.restID=e3.restID AND e3.extraID=3)
INNER JOIN tbl_extra AS e4 ON (r.restID=e4.restID AND e4.extraID=4)
INNER JOIN tbl_extra AS e5 ON (r.restID=e5.restID AND e5.extraID=8)
INNER JOIN tbl_extra AS e6 ON (r.restID=e6.restID AND e6.extraID=7)
Where k.katID>0 AND r.restNamn LIKE '%%' AND r.aktiv = 1 AND r.stadID = 68;
...inte så särskilt mycket smidigare, eller hur?