MySQLi - Sử dụng Joins

Cho đến nay, chúng tôi chỉ nhận được dữ liệu từ một bảng tại một thời điểm. Điều này là tốt cho các thao tác đơn giản, nhưng trong hầu hết việc sử dụng MySQL trong thế giới thực, bạn thường sẽ cần lấy dữ liệu từ nhiều bảng trong một truy vấn duy nhất.

Bạn có thể sử dụng nhiều bảng trong một truy vấn SQL của mình. Hành động tham gia trong MySQLi đề cập đến việc đập hai hoặc nhiều bảng thành một bảng duy nhất.

Bạn có thể sử dụng JOINS trong các câu lệnh SELECT, UPDATE và DELETE để tham gia các bảng MySQLi. Chúng ta sẽ thấy một ví dụ về LEFT JOIN cũng khác với MySQLi JOIN đơn giản.

Sử dụng Joins tại Command Prompt

Giả sử chúng ta có hai bảng tutorials_bkstutorials_inf, trong TUTORIALS. Dưới đây là một danh sách đầy đủ -

Thí dụ

Hãy thử các ví dụ sau:

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>

Bây giờ chúng ta có thể viết một truy vấn SQL để nối hai bảng này. Truy vấn này sẽ chọn tất cả các tên từ bảngtutorials_inf và sẽ nhận số lượng hướng dẫn tương ứng từtutorials_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>

Trong bảng tutorial_bks, chúng tôi có 5 bản ghi nhưng trong ví dụ trên, nó lọc và chỉ cung cấp 4 bản ghi id theo mỗi truy vấn

Sử dụng Joins trong PHP Script

Bạn có thể sử dụng bất kỳ truy vấn SQL nào được đề cập ở trên trong tập lệnh PHP. Bạn chỉ cần chuyển truy vấn SQL vào hàm PHPmysqli_query() và sau đó bạn sẽ tìm nạp kết quả theo cách thông thường.

Thí dụ

Hãy thử ví dụ sau:

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

Đầu ra mẫu phải như thế này -

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

MySQL THAM GIA TRÁI

Một phép nối trái MySQLi khác với một phép nối đơn giản. MySQLi LEFT JOIN cung cấp thêm sự cân nhắc cho bảng ở bên trái.

Nếu tôi thực hiện THAM GIA TRÁI, tôi nhận được tất cả các bản ghi khớp theo cùng một cách và TRONG BỔ SUNG, tôi nhận được thêm một bản ghi cho mỗi bản ghi chưa khớp trong bảng bên trái của phép nối - do đó đảm bảo (trong ví dụ của tôi) rằng mọi tên đều có đề cập đến -

Thí dụ

Hãy thử ví dụ sau để hiểu 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;

Bạn sẽ cần thực hành nhiều hơn để làm quen với JOINS. Đây là một khái niệm hơi phức tạp trong MySQL / SQL và sẽ trở nên rõ ràng hơn khi làm các ví dụ thực tế.