Join met 4 tabellen
Ik heb 4 tabellen die ik wil koppelen.
klanten
klant_id, voornaam, achternaam (+ alles naw gegevens, niet relevant)
films
film_id, titel, regie, cast
rooster
rooster_id, film_id, datum, tijd
reserveringen
reservering_id, rooster_id, klant_id, datum, aantal_kaarten
Ik zal het even kort toelichten. Het is een website voor een bioscoop (schoolopdracht). De klanten en films tabel spreken voorzich neem ik aan. Dan de rooster tabel. Hier staan de voorstellingen van de films. Een film draait op meerdere dagen en per dag meerdere keren.
Verder de reserverings tabel. Klanten kunnen kaarten reserveren voor een bepaalde film op een bepaald tijdstip. Vandaar dat er een koppeling word gemaakt met de rooster tabel dmv rooster_id en niet met de films tabel.
Nu mijn probleem. Ik wil per klant weten wat die klant heeft geserveerd. Dus ik heb die 4 tabellen nodig, maar ik weet niet hoe ik ze moet joinen. Heb al wat geprobeerd met een join en union.
En zo zou ik ook een lijst willen van de reserveringen waarbij je ziet welke klant wat welke film heeft gereserveerd op welke dag en tijdstip.
Kunnen jullie mij helpen?
ShuGos
Code (php)
Zoiets?
Je moet nog wel even aanpassen welke kolommen je wilt hebben
Gewijzigd op 01/01/1970 01:00:00 door stien ss
Gaaf man! Het werkt. Super bedankt.
Ik vind dat eigenlijk geen mooie oplossing (dezelfde namen). Kijk maar bijvoorbeeld als je de film in een categorie wilt plaatsen. Categorie heeft ook als kolom 'titel' evenals film. Dan zit je dus met dezelfde kolomnamen. Op zich niet erg, behalve als je de gegevens echt gaat gebruiken met bijvoorbeeld een echo (echo $row->titel, geeft dan altijd de laatste kolom met de naam titel).
Persoonlijk gebruik ik altijd een 3 letterige 'prefix' voor de kolommen in mijn tabellen. Bijvoorbeeld de tabel klant:
kln_id, kln_voornaam, etc.
Hierdoor heb ik nooit dezelfde kolomnamen in een query.
Maar goed, dan kan je dus ook niet USING gebruiken denk ik. Dan kom je dus uit bij de oplossing van Stien. Maar er is een mooiere. Even een fictieve query:
Code (php)
1
2
3
4
2
3
4
SELECT k.kln_voornaam, p.pls_naam,
FROM klant k, plaats p
WHERE k.kln_pls_id = p.pls_id
AND k.kln_id = 1
FROM klant k, plaats p
WHERE k.kln_pls_id = p.pls_id
AND k.kln_id = 1
De inner join wordt nu afgehandeld in de WHERE, en in de FROM is direct duidelijk uit welke tabellen de data gehaald wordt.
Elwin
[Edit: Code-tags]
Gewijzigd op 01/01/1970 01:00:00 door Elwin - Fratsloos
Even een normalisatiekwestie: waarom heb je het velde datum nodig in de tabel reserveringen? Je hebt immers een rooster_id en in de tabel rooster staat ook al een datum.
Scherp, scherp... :)
Maar het zou goed de datum (en tijd?) van het reserveren kunnen zijn. Niet van de voorstelling. Dus ik resereveer NOW() voor voorstelling X op datum Y.
Elwin
De datum van reserveren lijkt me niet relevant. Maar als dat inderdaad de bedoeling is zou ik beschrijvender veldnamen verzinnen.
Jan Koehoorn schreef op 06.02.2007 22:20:
Ach... dat weet je niet. Voor hetzelfde geld ga je het gebruiken voor statistieken (wanneer wordt er gereserveerd) of validatie (reservering moet binnen X-tijd gevalideerd zijn, anders vervalt deze).De datum van reserveren lijkt me niet relevant.
Jan Koehoorn schreef op 06.02.2007 22:20:
Dat ben ik helemaal met je eens!Maar als dat inderdaad de bedoeling is zou ik beschrijvender veldnamen verzinnen.
Elwin
De datum en tijd kolom in de rooster tabel geeft aan wanneer een film draaid. Het zelfde idee als bij het reserveren op www.pathe.nl
De datum in de resservering tabel is het moment van reserveren. Ik weet dus wanneer een klant zich voor een bepaalde film heeft gereserveerd.
Ja, dus zou ik de veldnamen veranderen in respectievelijk draaidatum en reserveringsdatum. Dat voorkomt verwisselingen.