Page 159 - Corso di PHP - Livello base
P. 159
esempio l'ultima) scrivendo così:
$query = "SELECT * FROM Post AS p INNER JOIN Autori AS a ON p.IdAutore = a.Id";
$risultato = mysql_query($query);
Ma dal momento che si tratta del tipo di unione predefinito
possiamo anche non specificarlo. Questo perché esiste anche un
altro tipo di unione, OUTER JOIN, che al contrario delle
unioni di tipo INNER JOIN tiene conto anche dei risultati che
non trovano corrispondenza tra di loro. Le unioni OUTER
JOIN si suddividono a loro volta in LEFT JOIN, ovvero unioni
che contengono sempre tutti i record della prima tabella (la
tabella di sinistra, left) mentre per quanto riguarda i record della
seconda tabella (quella di destra, right) vengono estratti solo i
record che trovano una corrispondenza con quelli della
tabella di sinistra, e in RIGHT JOIN, che funzionano
all'inverso rispetto alle unioni LEFT JOIN.
Per esempio, supponiamo di avere tre autori e quattro post: tre
scritti dall'autore 1, uno scritto dall'autore 2 e nessuno scritto
dall'autore 3. Prendiamo questa query:
$query = "SELECT * FROM Autori LEFT JOIN Post ON Autori.Id = Post.IdAutore";
$risultato = mysql_query($query);
In questo caso vengono selezionati tutti i record della tabella
Autori uniti ai soli record della tabella Post che trovano una
corrispondenza. Con un INNER JOIN l'autore numero 3 non
sarebbe stato preso in considerazione dalla query, invece con
questo OUTER JOIN di tipo LEFT (avremmo potuto scrivere,
nel comando, anche LEFT OUTER JOIN) l'autore numero 3
viene comunque estratto. Se poi stampassimo:
while ($record = mysql_fetch_array($risultato, MYSQL_ASSOC))
{
159