MySQLi: uso de combinaciones

Hasta ahora, solo hemos obtenido datos de una tabla a la vez. Esto está bien para tomas simples, pero en la mayor parte del uso de MySQL en el mundo real, a menudo necesitará obtener datos de varias tablas en una sola consulta.

Puede utilizar varias tablas en su única consulta SQL. El acto de unirse en MySQLi se refiere a romper dos o más tablas en una sola tabla.

Puede utilizar JOINS en sentencias SELECT, UPDATE y DELETE para unir tablas MySQLi. También veremos un ejemplo de LEFT JOIN que es diferente de MySQLi JOIN simple.

Usar combinaciones en el símbolo del sistema

Supongamos que tenemos dos tablas tutorials_bks y tutorials_inf, en TUTORIALES. A continuación se proporciona una lista completa:

Ejemplo

Pruebe los siguientes ejemplos:

[email protected]# 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>

Ahora podemos escribir una consulta SQL para unir estas dos tablas. Esta consulta seleccionará todos los nombres de la tablatutorials_inf y recogerá el número correspondiente de tutoriales 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>

En la tabla tutorials_bks, tenemos 5 registros, pero en el ejemplo anterior filtra y proporciona solo 4 registros de identificación según la consulta

Usando Joins en PHP Script

Puede utilizar cualquiera de las consultas SQL mencionadas anteriormente en un script PHP. Solo necesita pasar la consulta SQL a la función PHPmysqli_query() y luego obtendrá los resultados de la manera habitual.

Ejemplo

Pruebe el siguiente ejemplo:

<?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);
?>

La salida de muestra debería ser así:

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

MySQL LEFT JOIN

Una combinación izquierda de MySQLi es diferente de una combinación simple. Un LEFT JOIN de MySQLi da consideración adicional a la tabla que está a la izquierda.

Si hago un LEFT JOIN, obtengo todos los registros que coinciden de la misma manera y ADEMÁS obtengo un registro adicional para cada registro no coincidente en la tabla izquierda de la combinación, lo que garantiza (en mi ejemplo) que cada nombre obtenga un mencionar -

Ejemplo

Pruebe el siguiente ejemplo para comprender LEFT JOIN:

[email protected]# 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;

Necesitaría practicar más para familiarizarse con JOINS. Este es un concepto un poco complejo en MySQL / SQL y se volverá más claro al hacer ejemplos reales.