Multiple Joins

Natuurlijk zijn de in de voorgaande “hoofdstukken” genoemde Joins niet compleet. Je krijgt nu bij een film alleen de actor_id te zien, maar je weet niet wie er in de film speelt. Hiervoor heb je een koppeling tussen alle 3 de tabellen nodig. Natuurlijk is de titel “Multiple Join” geen officiële benaming, maar het dekt wel de lading van wat ik jullie hier laat zien.

Deze “multiple join” schreef ik in de vorige tutorial anders uit dan hier. Ook ik leer natuurlijk bij en heb geleerd dat het noteren van een “Multiple Join” zonder de haakjes (ik zal beide voorbeelden hier laten zien) prima kan en minstens net zo gemakkelijk is. Sterker nog, hij is gemakkelijker te lezen (omdat het van boven naar beneden geld) dan de variant met haakjes. (daar ga je uit van de “laatste join” omdat die twee tabellen de basis vormen dan dan weer verder omhoog) In de variant zonder haakjes vormen de eerste twee tabellen de basis enzo verder tot aan de laatste Join.

Goed, om te laten zien hoe die multiple Join eruit kan komen te zien, hieronder eerst de variant met haakjes:

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
SELECT
   m.id AS id_movie,
   m.title,
   CONCAT(a.firstname, ,a.lastname)
FROM
   movies AS m
INNER JOIN
     (movie_actors AS ma
   INNER JOIN
      actors AS a
   ON
      a.id = ma.actor_id)
ON
   m.id = ma.movie_id
 


Om bovenstaande code te “lezen” lees je eerst de Join die tussen haakjes staat. Er wordt in theorie (in praktijk weet ik niet hoe het aan de achterkant gaat, maar deze uitleg maakt het misschien wat begrijpelijker) een tabel gemaakt van de Join tussen movie_actors en actors, en vervolgens een Join op deze nieuwe tabel met de movies tabel.

Gemakkelijker vind ikzelf (dit is echter maar net wat je zelf prettiger vindt) de notatie zonder haakjes, omdat je zo gewoon van boven naar beneden kan lezen. (zie de voorbeeldcode hieronder)

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
SELECT
   m.id AS id_movie,
   m.title,
   CONCAT(a.firstname, ,a.lastname)
FROM
   movies AS m
INNER JOIN
   movie_actors AS ma
ON
   m.id = ma.movie_id
INNER JOIN
   actors AS a
ON
   a.id = ma.actor_id
 


Hier wordt eerst een nieuwe tabel gemaakt van de join tussen movies en movie_actors om vervolgens deze nieuwe tabel te combineren met de actors tabel.

Beide query’s doen verder precies hetzelfde en hebben hetzelfde resultaat. De volgorde van de tabellen maakt niet heel veel uit in de Join, maar je moet er wel altijd rekening mee houden dat je eerst zorgt dat je in de tabel “tot dan toe” (je kan dit namelijk ook toepassen op nog meer tabellen dan de 3 uit het voorbeeld) de informatie beschikbaar hebt die je voor de Join nodig hebt. In het in deze tutorial gebruikte voorbeeld heb je om te beginnen dus altijd een Join nodig tussen één van de tabellen met tekstuele informatie (actors of movies) en de koppeltabel.

De informatie die je uit deze query krijgt ziet er als volgt uit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
1     Eduard Schaarhand         Angel Jolige
2     Tombe rijder             Angel Jolige
3     Zeven jaar in de bergen     Brador Pittje
1     Eduard Schaarhand         John Depperd
3    Zeven jaar in de bergen     John Depperd
2     Tombe rijder             Arno Zwartebesje


Hieronder is schematisch aangegeven welke gegevens met deze “Multiple Join” worden geselecteerd.

« Lees de omschrijving en reacties

Inhoudsopgave

  1. Inleiding
  2. Tabelopbouw
  3. Inner Join
  4. Left Join
  5. Left Join (IS NULL)
  6. Right Join
  7. Right Join (IS NULL)
  8. Outer Join
  9. Outer Join (IS NULL)
  10. Multiple Joins
  11. Tabel met zichzelf Joinen
  12. Tot slot

PHP tutorial opties

 
 

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.