webForumDet fria alternativet

Inner Join

7 svar · 394 visningar · startad av Salamana

SalamanaMedlem sedan mars 2005158 inlägg
#1

Jag har en InnerJoin som slöar ner systemet totalt.. Den används i en sökfunktion där man kan välja x-antal checkboxar.. Kryssar jag i 3st så fungerar den...men väljer jag 5st eller fler så blir det "TimeOut"... Någon som kan ge exempel på annan lösning... Det understrykta är själva checkboxarna.

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 [U](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) [/U] Where k.katID>0 AND r.restNamn LIKE '%%' AND r.aktiv = 1 AND r.stadID = 68;
Jesper TMedlem sedan nov. 20017 144 inlägg
#2

Kan du beskriva hur dina tabeller är uppbyggda och vilket resultat du vill ha?

SalamanaMedlem sedan mars 2005158 inlägg
#3

Jag vill hämta ut de resturanger som uppfyller det man valt i checkboxarna. Checkboxarna är helt dynamiska...

Innan hade jag totalt 6st val och valde man 3st så fungerade det...men inte om man valde fler..

Då testade jag att lägga till så att man hade totalt 10st val...och valde man 7st så fungerade den ..men inte om man valde fler..

Då borde jag kunna lägga till tre val i db men som jag inte visar men som är med i sökningen.....

Jag bifogar en bild med de tabeller jag använder i denna sql...samt en bild på formuläret....

db jag använder är MySql..

/Danne

innerjoin.gif
yohpopsMedlem sedan feb. 20011 198 inlägg
#4

Flytta de tre extraid= till where satsen.
Vad har de i join satsen att göra?
Och varför joinar du in de tre tbl_extra, de används ju inte?

emissionMedlem sedan dec. 19996 721 inlägg
#5

Faktum är att din SQL-sats är helt rätt. Den går att skriva annorlunda, men frågan är om man tjänar något på det.

Ex:

select distinct r.restID, r.restNamn, r.menyTyp from tbl_resturang AS r INNER JOIN tbl_kategori AS k ON r.restID=k.restID Where k.katID>0 AND r.restNamn LIKE '%%' AND r.aktiv = 1 AND r.stadID = 68 AND EXISTS (SELECT COUNT(*) FROM tbl_extra e WHERE e.restID=r.restID AND e.extraID IN (1,2,3) HAVING COUNT(*)=3);
SalamanaMedlem sedan mars 2005158 inlägg
#6

Jo så går också att skriva men man tjänar som sagt inget på det...

Men det verkar som att talet tre är heligt.. Du kan kryssa i alla checkboxar utom tre....då fungerar den men väljer du fler så tar det en evighet att köra frågan...

Om man hämtar ut allt ur dessa tabeller i ett dynamiskt rs...kan man sedan sålla bort den informationen som man inte vill ha??
Hur ställer man då fråga mot ett dynamiskt rs??

emissionMedlem sedan dec. 19996 721 inlägg
#7

Om du inte satt att restId+extraId är primärnyckel i tbl_extra så bör du göra det. Att filtrera ut i efterhand är inget alternativ, som jag ser det.

SalamanaMedlem sedan mars 2005158 inlägg
#8

Förmodligen var det ej fel på koden...testade att tömma databasen på data och efter det fungerade det korrekt. Måste tappat ngt id eller liknande på ngn post.

Tack ändån för visat intresse!

128 ms totalt · 3 externa anrop · v20260731065814-full.2b84b982
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)