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
   154   155   156   157   158   159   160   161   162   163   164