SQL Join
Ik heb 3 tabellen:
gebruikers (gebruikersid, gebruikersnaam, woonplaats,...)
kalender (kalenderid, gebruikersid,...)
verzoeken (verzoekid, kalenderid, gebruikersid, zichtbaar,...)
Wat probeer ik te bereiken?
Een gebruiker zet iets op een kalender. Andere gebruikers kunnen een verzoek sturen (INSERT + zichtbaar = 1) of terug annuleren (UPDATE zichtbaar = 0). Ik probeer nu een "lijst" te maken zodat een gebruiker kan zien welke gebruikers een verzoek hebben gestuurd. Dus: ik ben gebruiker 1... En gebruiker 2 & 3 hebben een verzoek gestuurd voor activiteit 6 (kalenderid = 6) en ik wil graag hun gebruikersnaam | woonplaats zien (alleen van activiteit 6).
Hopelijk is het een beetje duidelijk. Ik ben enkel opzoek naar de SQL verder weet ik hoe ik alles eruit haal :)
from gebruikers a, kalender b, verzoeken c
where a.gebruikersid=b.gebruikersid
and a.gebruikersid=c.gebruikersid
and b.kalenderid=6
and c.activiteit=6
Bedankt!
Gewijzigd op 22/02/2012 00:09:53 door PH Piet
Code (php)
1
2
3
4
5
2
3
4
5
SELECT c.gebruikersnaam, c.woonplaats, etc, etc
FROM kalender a
INNER JOIN verzoeken b ON a.kalenderid = b.kalenderid
LEFT JOIN gebruikers c ON a.gebruikersid = c.gebruikersid
WHERE b.kalenderid = 6
FROM kalender a
INNER JOIN verzoeken b ON a.kalenderid = b.kalenderid
LEFT JOIN gebruikers c ON a.gebruikersid = c.gebruikersid
WHERE b.kalenderid = 6
Het voordeel is dat je meer controle hebt over hoe joins gemaakt worden. Zie bijvoorbeeld dat ik zowel een INNER JOIN als een LEFT JOIN heb gebruikt. Bij een INNER JOIN worden alleen rijen geselecteerd die in beide tabellen een waarde hebben staan, terwijl bij een LEFT JOIN alle rijen in de rechter tabel (de eerste, in dit geval kalender) geselecteerd worden en als er geen rij bestaat in de linker tabel (gebruikers in dit geval) dan levert het allemaal NULL waardes op. Zo kan je dus bijvoorbeeld door middel van het JOIN type bepalen of je rijen in de kalender wil selecteren waarvoor geen verzoek aanwezig is.
Andere voordelen zijn dat je WHERE statement veel overzichtelijker wordt omdat je de join voorwaarden er niet meer in hebt staan en, zo schijnt, het is ook sneller...