2 joins zelfde tabel

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Kees Mulder

Kees Mulder

22/03/2022 09:10:58
Quote Anchor link
Ik heb de volgende opzet.

BOEKINGEN
boeking_id
boeking_datum
boeking_naam

ADRESSEN
adres_id
adres_naam
adres_plaats

BOEKINGEN_ADRESSEN
oa_id
boeking_id
adres_id

BOEKINGEN_LOCATIES
bl_id
boeking_id
locatie_id

Ik heb alle adressen van locaties en klanten in 1 tabel staan.

Maar hoe kan ik een join doen met beide tabellen? Onderstaande zou ik doen maar werkt niet. Hoe kan ik dit oplossen of moet ik toch een extra tabel met LOCATIES maken?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
$sql = "SELECT * FORM boekingen
LEFT JOIN boekingen_adressen ON boekingen_adressen.boeking_id = boekingen.boeking_id
LEFT JOIN adressen ON adressen.adres_id = boekingen_adressen.adres_id
LEFT JOIN boekingen_locaties ON boekingen_locaties.boeking_id = boekingen.boeking_id
LEFT JOIN adressen ON adressen.adres_id = boekingen_locaties.adres_id
 
PHP hulp

PHP hulp

18/04/2024 22:53:47
 
Jan R

Jan R

22/03/2022 11:49:43
Quote Anchor link
Je zal een alias moeten gebruiken voor de tabellen adressen
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
SELECT * FORM boekingen
LEFT JOIN boekingen_adressen ON boekingen_adressen.boeking_id = boekingen.boeking_id
LEFT JOIN adressen a1 ON a1.adres_id = boekingen_adressen.adres_id
LEFT JOIN boekingen_locaties ON boekingen_locaties.boeking_id = boekingen.boeking_id
LEFT JOIN adressen a2 ON a2.adres_id = boekingen_locaties.adres_id
 
Ivo P

Ivo P

22/03/2022 12:44:08
Quote Anchor link
Waarbij het dan aan te raden is om een iets-zeggende alias te kiezen:

LEFT JOIN adressen AS adres_klant
en
LEFT JOIN adressen AS adres_locatie

Zodat je je niet blind zit te staren op "was a2 nu van de boeking of de klant?"
 
Kees Mulder

Kees Mulder

22/03/2022 14:06:26
Quote Anchor link
Als ik onderstaande doen dan krijg ik niet de locatie en klant naam te zien als ik deze echo.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
SELECT *, adres_locatie.adres_naam AS locatieadres, adres_klant.adres_naam AS klantadres FORM boekingen
LEFT JOIN boekingen_adressen ON boekingen_adressen.boeking_id = boekingen.boeking_id
LEFT JOIN adressen AS adres_klant ON adres_klant.adres_id = boekingen_adressen.adres_id
LEFT JOIN boekingen_locaties ON boekingen_locaties.boeking_id = boekingen.boeking_id
LEFT JOIN adressen AS adres_locatie ON adres_locatie.adres_id = boekingen_locaties.adres_id
 
Jan R

Jan R

22/03/2022 16:45:15
Quote Anchor link
Logisch. Je werkt met dubbele veld namen en vermoedelijk met assoc. Het grote nadeel van werken met *
Geef alle velden op ipv * en geef de dubbele een duidelijk alias
 
Adoptive Solution

Adoptive Solution

22/03/2022 17:30:06
Quote Anchor link
Op basis van bovenstaande ‘tabellen’ heb ik deze query verzonnen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
SELECT
bk.boeking_id AS bkbi,
bk.boeking_datum,
bk.boeking_naam,

ad.adres_id AS adai,
ad.adres_naam,
ad.adres_plaats,

bl.boeking_id AS blbi

FROM boekingen bk

JOIN boekingen_adressen ba
ON ba.boeking_id = bk.boeking_id

JOIN adressen ad
ON ad.adres_id = ba.adres_id

JOIN boekingen_locaties bl
ON bl.boeking_id = bk.boeking_id;
 
Jan Koehoorn

Jan Koehoorn

22/03/2022 19:54:18
Quote Anchor link
Tip: als de kolomnamen in beide tabellen identiek zijn, kun je ook het keyword USING gebruiken. Maakt je query's een stuk korter en dus leesbaarder:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
$sql = "
    SELECT * FROM boekingen
    LEFT JOIN boekingen_adressen USING(boeking_id)
    LEFT JOIN adressen USING(adres_id)
    LEFT JOIN boekingen_locaties USING(boeking_id)
        -- etc
";


Dit lost niet meteen jouw vraag op, maar je bent van al die tabelnamen/-aliassen af.
Opmerking: er stond FORM ipv FROM in je query.
Gewijzigd op 22/03/2022 20:04:07 door Jan Koehoorn
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.