Verwenden von MySQl-Joins
In den vorherigen Kapiteln haben wir jeweils Daten aus einer Tabelle abgerufen. Dies ist gut genug für einfache Takes, aber in den meisten MySQL-Anwendungen der realen Welt müssen Sie häufig Daten aus mehreren Tabellen in einer einzigen Abfrage abrufen.
Sie können mehrere Tabellen in Ihrer einzelnen SQL-Abfrage verwenden. Der Vorgang des Beitritts zu MySQL bezieht sich auf das Zerschlagen von zwei oder mehr Tabellen in einer einzigen Tabelle.
Sie können JOINS in den Anweisungen SELECT, UPDATE und DELETE verwenden, um die MySQL-Tabellen zu verbinden. Wir werden auch ein Beispiel für LEFT JOIN sehen, das sich von dem einfachen MySQL JOIN unterscheidet.
Verwenden von Joins an der Eingabeaufforderung
Angenommen, wir haben zwei Tabellen tcount_tbl und tutorials_tbl, in TUTORIALS. Schauen Sie sich nun die folgenden Beispiele an -
Beispiel
Die folgenden Beispiele -
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT * FROM tcount_tbl;
+-----------------+----------------+
| tutorial_author | tutorial_count |
+-----------------+----------------+
| mahran | 20 |
| mahnaz | NULL |
| Jen | NULL |
| Gill | 20 |
| John Poul | 1 |
| Sanjay | 1 |
+-----------------+----------------+
6 rows in set (0.01 sec)
mysql> SELECT * from tutorials_tbl;
+-------------+----------------+-----------------+-----------------+
| tutorial_id | tutorial_title | tutorial_author | submission_date |
+-------------+----------------+-----------------+-----------------+
| 1 | Learn PHP | John Poul | 2007-05-24 |
| 2 | Learn MySQL | Abdul S | 2007-05-24 |
| 3 | JAVA Tutorial | Sanjay | 2007-05-06 |
+-------------+----------------+-----------------+-----------------+
3 rows in set (0.00 sec)
mysql>
Jetzt können wir eine SQL-Abfrage schreiben, um diese beiden Tabellen zu verbinden. Diese Abfrage wählt alle Autoren aus der Tabelle austutorials_tbl und holt die entsprechende Anzahl von Tutorials aus dem tcount_tbl.
mysql> SELECT a.tutorial_id, a.tutorial_author, b.tutorial_count
-> FROM tutorials_tbl a, tcount_tbl b
-> WHERE a.tutorial_author = b.tutorial_author;
+-------------+-----------------+----------------+
| tutorial_id | tutorial_author | tutorial_count |
+-------------+-----------------+----------------+
| 1 | John Poul | 1 |
| 3 | Sanjay | 1 |
+-------------+-----------------+----------------+
2 rows in set (0.01 sec)
mysql>
Verwenden von Joins in einem PHP-Skript
Sie können jede der oben genannten SQL-Abfragen im PHP-Skript verwenden. Sie müssen nur die SQL-Abfrage an die PHP-Funktion übergebenmysql_query() und dann werden Sie die Ergebnisse auf die übliche Weise abrufen.
Beispiel
Das folgende Beispiel -
<?php
$dbhost = 'localhost:3036';
$dbuser = 'root';
$dbpass = 'rootpassword';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn ) {
die('Could not connect: ' . mysql_error());
}
$sql = 'SELECT a.tutorial_id, a.tutorial_author, b.tutorial_count
FROM tutorials_tbl a, tcount_tbl b
WHERE a.tutorial_author = b.tutorial_author';
mysql_select_db('TUTORIALS');
$retval = mysql_query( $sql, $conn );
if(! $retval ) {
die('Could not get data: ' . mysql_error());
}
while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
echo "Author:{$row['tutorial_author']} <br> ".
"Count: {$row['tutorial_count']} <br> ".
"Tutorial ID: {$row['tutorial_id']} <br> ".
"--------------------------------<br>";
}
echo "Fetched data successfully\n";
mysql_close($conn);
?>
MySQL LEFT JOIN
Ein MySQL Left Join unterscheidet sich von einem einfachen Join. Ein MySQL LEFT JOIN berücksichtigt die Tabelle auf der linken Seite zusätzlich.
Wenn ich a mache LEFT JOINIch erhalte alle Datensätze, die auf die gleiche Weise übereinstimmen, und zusätzlich erhalte ich einen zusätzlichen Datensatz für jeden nicht übereinstimmenden Datensatz in der linken Tabelle des Joins, um sicherzustellen (in meinem Beispiel), dass jeder AUTOR eine Erwähnung erhält.
Beispiel
Versuchen Sie das folgende Beispiel, um den LEFT JOIN zu verstehen.
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT a.tutorial_id, a.tutorial_author, b.tutorial_count
-> FROM tutorials_tbl a LEFT JOIN tcount_tbl b
-> ON a.tutorial_author = b.tutorial_author;
+-------------+-----------------+----------------+
| tutorial_id | tutorial_author | tutorial_count |
+-------------+-----------------+----------------+
| 1 | John Poul | 1 |
| 2 | Abdul S | NULL |
| 3 | Sanjay | 1 |
+-------------+-----------------+----------------+
3 rows in set (0.02 sec)
Sie müssten mehr üben, um sich mit JOINS vertraut zu machen. Dies ist ein etwas komplexes Konzept in MySQL / SQL und wird anhand realer Beispiele klarer.