Page 1284 - Informatica dalla A a Z
P. 1284
in considerazione (nel nostro caso Autori) e scartato il campo con lo stesso nome nelle
tabelle precedenti. Per ovviare a questo problema possiamo rinominare, all’interno della
query, il campo che crea il conflitto. Lo facciamo tramite la clausola AS, che deve essere
seguita dal nuovo nome del campo che ci interessa:
$query = “SELECT Post.Titolo, Post.Id, Autori.Id AS NumeroAu-
tore, Autori.Nickname FROM Post
JOIN Autori ON Post.IdAutore = Autori.Id”;
$risultato = mysql_query($query);
Ora potremo stampare in questo modo:
while ($record = mysql_fetch_array($risultato, MYSQL_ASSOC))
{
echo “Post numero {$record[‘Id’]}: {$record[‘Titolo’]}, scritto
da {$record[‘Nickname’]} (autore
numero {$record[‘NumeroAutore’]})<br />”;
}
è possibile rinominare anche le tabelle:
$query = “SELECT * FROM Post AS p JOIN Autori AS a ON p.IdAutore
= a.Id”;
$risultato = mysql_query($query);
Questo tipo di unione è detta INNER JOIN. Esistono anche altri tipi di unioni, le OUTER JOIN,
che a loro volta si dividono in LEFT JOIN, ovvero unioni che contengono sempre tutti i re-
cord 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.
Esempio:
$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.
Il RIGHT JOIN funziona allo stesso modo del LEFT JOIN ma in maniera inversa:
$query = “SELECT * FROM Post RIGHT JOIN Autori ON Autori.Id =
Post.IdAutore”;
$risultato = mysql_query($query);
1280