MySQLi - Utilizzo dei join

Finora, abbiamo ottenuto solo dati da una tabella alla volta. Questo va bene per riprese semplici, ma nella maggior parte dell'utilizzo di MySQL nel mondo reale, sarà spesso necessario ottenere dati da più tabelle in una singola query.

È possibile utilizzare più tabelle nella singola query SQL. L'atto di unirsi in MySQLi si riferisce a frantumare due o più tabelle in una singola tabella.

È possibile utilizzare JOINS nelle istruzioni SELECT, UPDATE e DELETE per unire le tabelle MySQLi. Vedremo anche un esempio di LEFT JOIN che è diverso dal semplice MySQLi JOIN.

Utilizzo dei join al prompt dei comandi

Supponiamo di avere due tabelle tutorials_bks e tutorials_inf, in TUTORIAL. Di seguito viene fornito un elenco completo:

Esempio

Prova i seguenti esempi:

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> SELECT * FROM tcount_bks;
+----+---------+
| id | book    |
+----+---------+
|  1 | java    |
|  2 | java    |
|  3 | html    |
|  4 | c++     |
|  5 | Android |
+----+---------+
5 rows in set (0.00 sec)

mysql> SELECT * from tutorials_inf;
+----+-------+
| id | name  |
+----+-------+
|  1 | sai   |
|  2 | johar |
|  3 | raghu |
|  4 | ram   |
+----+-------+
4 rows in set (0.00 sec)

mysql>

Ora possiamo scrivere una query SQL per unire queste due tabelle. Questa query selezionerà tutti i nomi dalla tabellatutorials_inf e raccoglierà il numero corrispondente di tutorial datutorials_bks.

mysql> SELECT a.id, a.name,b.id FROM tutorials_inf a,tutorials_bks b WHERE a.id = b.id;
+----+-------+----+
| id | name  | id |
+----+-------+----+
|  1 | sai   |  1 |
|  2 | johar |  2 |
|  3 | raghu |  3 |
|  4 | ram   |  4 |
+----+-------+----+
4 rows in set (0.00 sec)
mysql>

Nella tabella tutorials_bks, abbiamo 5 record ma nell'esempio sopra filtra e fornisce solo 4 record id come da query

Utilizzo dei join nello script PHP

È possibile utilizzare una qualsiasi delle query SQL sopra menzionate nello script PHP. Hai solo bisogno di passare la query SQL nella funzione PHPmysqli_query() e poi recupererai i risultati nel solito modo.

Esempio

Prova il seguente esempio:

<?php
   $dbhost = 'localhost:3306';
   $dbuser = 'root';
   $dbpass = '';
   $dbname = 'TUTORIALS';
   $conn = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname);
   
   if(! $conn ) {
      die('Could not connect: ' . mysqli_error());
   }
   echo 'Connected successfully</br>';
   $sql = 'SELECT a.id, a.name,b.id FROM tutorials_inf a,tutorials_bks b WHERE a.id = b.id';
   
   if($result = mysqli_query($conn, $sql)) {
      if(mysqli_num_rows($result) > 0) {
         echo "<table>";
         echo "<tr>";
         echo "<th>id</th>";
         echo "<th>name</th>";
         echo "<th>id</th>";
         echo "</tr>";
         
         while($row = mysqli_fetch_array($result)){
            echo "<tr>";
            echo "<td>" . $row['id'] . "</td>";
            echo "<td>" . $row['name'] . "</td>";
				echo "<td>" . $row['id'] . "</td>";
            echo "</tr>";
         }
         echo "</table>";
         mysqli_free_result($result);
      } else {
         echo "No records matching your query were found.";
      }
   } else {
      echo "ERROR: Could not able to execute $sql. " . mysqli_error($conn);
   }
   mysqli_close($conn);
?>

L'output di esempio dovrebbe essere così:

Connected successfully
id	name	id
1	sai	1
2	johar	2
3	raghu	3
4	ram	4

MySQL LEFT JOIN

Un join sinistro di MySQLi è diverso da un join semplice. Un MySQLi LEFT JOIN dà una considerazione extra alla tabella che si trova a sinistra.

Se eseguo un LEFT JOIN, ottengo tutti i record che corrispondono allo stesso modo e IN AGGIUNTA ottengo un record extra per ogni record non abbinato nella tabella di sinistra del join, assicurandomi così (nel mio esempio) che ogni nome abbia un menzione -

Esempio

Prova il seguente esempio per capire LEFT JOIN -

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql>SELECT a.id, a.name,b.id FROM tutorials_inf a LEFT JOIN tutorials_bks b ON a.id = b.id;

Dovresti fare più pratica per acquisire familiarità con JOINS. Questo è un concetto un po 'complesso in MySQL / SQL e diventerà più chiaro durante l'esecuzione di esempi reali.