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.