MySQLi - Utilisation des jointures

Jusqu'à présent, nous n'avons obtenu les données que d'une seule table à la fois. C'est bien pour les prises simples, mais dans la plupart des utilisations de MySQL dans le monde réel, vous aurez souvent besoin d'obtenir des données de plusieurs tables dans une seule requête.

Vous pouvez utiliser plusieurs tables dans votre seule requête SQL. L'acte de se joindre à MySQLi fait référence à l'écrasement de deux ou plusieurs tables en une seule table.

Vous pouvez utiliser JOINS dans les instructions SELECT, UPDATE et DELETE pour joindre des tables MySQLi. Nous verrons également un exemple de LEFT JOIN qui est différent du simple MySQLi JOIN.

Utilisation des jointures à l'invite de commande

Supposons que nous ayons deux tables tutorials_bks et tutorials_inf, dans TUTORIELS. Une liste complète est donnée ci-dessous -

Exemple

Essayez les exemples suivants -

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>

Nous pouvons maintenant écrire une requête SQL pour joindre ces deux tables. Cette requête sélectionnera tous les noms de la tabletutorials_inf et récupérera le nombre correspondant de tutoriels detutorials_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>

Dans la table tutorials_bks, nous avons 5 enregistrements, mais dans l'exemple ci-dessus, il filtre et ne donne que 4 enregistrements d'identifiant par requête

Utilisation des jointures dans le script PHP

Vous pouvez utiliser l'une des requêtes SQL mentionnées ci-dessus dans un script PHP. Il vous suffit de passer une requête SQL dans la fonction PHPmysqli_query() puis vous récupérerez les résultats de la manière habituelle.

Exemple

Essayez l'exemple suivant -

<?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'exemple de sortie devrait être comme ceci -

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

JOINT GAUCHE MySQL

Une jointure gauche MySQLi est différente d'une simple jointure. Une jointure à gauche MySQLi donne une considération supplémentaire à la table qui se trouve à gauche.

Si je fais une jointure à gauche, j'obtiens tous les enregistrements qui correspondent de la même manière et en plus j'obtiens un enregistrement supplémentaire pour chaque enregistrement sans correspondance dans le tableau de gauche de la jointure - assurant ainsi (dans mon exemple) que chaque nom obtient mention -

Exemple

Essayez l'exemple suivant pour comprendre 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;

Vous auriez besoin de faire plus de pratique pour vous familiariser avec JOINS. C'est un concept un peu complexe dans MySQL / SQL et deviendra plus clair en faisant de vrais exemples.