MySQLi - การใช้การเข้าร่วม

จนถึงตอนนี้เราได้รับข้อมูลจากตารางครั้งละหนึ่งตารางเท่านั้น สิ่งนี้ใช้ได้ดีสำหรับการใช้งานง่ายๆ แต่ในโลกแห่งความเป็นจริงการใช้งาน MySQL ส่วนใหญ่คุณมักจะต้องได้รับข้อมูลจากหลายตารางในแบบสอบถามเดียว

คุณสามารถใช้หลายตารางในแบบสอบถาม SQL เดียวของคุณ การเข้าร่วมใน MySQLi หมายถึงการรวมตารางสองตารางขึ้นไปให้เป็นตารางเดียว

คุณสามารถใช้ JOINS ในคำสั่ง SELECT, UPDATE และ DELETE เพื่อเข้าร่วมตาราง MySQLi เราจะเห็นตัวอย่างของ LEFT JOIN ซึ่งแตกต่างจาก MySQLi JOIN แบบธรรมดา

ใช้ Joins ที่ Command Prompt

สมมติว่าเรามีสองโต๊ะ tutorials_bks และ tutorials_infใน TUTORIALS รายชื่อที่สมบูรณ์ได้รับด้านล่าง -

ตัวอย่าง

ลองดูตัวอย่างต่อไปนี้ -

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>

ตอนนี้เราสามารถเขียนแบบสอบถาม SQL เพื่อรวมสองตารางนี้ได้ แบบสอบถามนี้จะเลือกชื่อทั้งหมดจากตารางtutorials_inf และจะรับจำนวนบทเรียนที่เกี่ยวข้องจาก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>

ในตาราง tutorials_bks เรามี 5 ระเบียน แต่ในตัวอย่างข้างต้นจะกรองและให้เพียง 4 ระเบียน id ตามแบบสอบถาม

การใช้ Joins ใน PHP Script

คุณสามารถใช้แบบสอบถาม SQL ที่กล่าวถึงข้างต้นในสคริปต์ PHP คุณจะต้องส่งแบบสอบถาม SQL ไปยังฟังก์ชัน PHP เท่านั้นmysqli_query() จากนั้นคุณจะดึงผลลัพธ์ตามปกติ

ตัวอย่าง

ลองใช้ตัวอย่างต่อไปนี้ -

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

ผลลัพธ์ตัวอย่างควรเป็นดังนี้ -

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

MySQL ซ้ายเข้าร่วม

การเข้าร่วม MySQLi จะแตกต่างจากการเข้าร่วมแบบธรรมดา MySQLi LEFT JOIN ให้การพิจารณาเป็นพิเศษกับตารางทางด้านซ้าย

ถ้าฉันทำการเข้าร่วมทางซ้ายฉันจะได้รับระเบียนทั้งหมดที่ตรงกันในลักษณะเดียวกันและในส่วนเพิ่มเติมฉันจะได้รับบันทึกพิเศษสำหรับแต่ละระเบียนที่ไม่ตรงกันในตารางด้านซ้ายของการเข้าร่วม - ดังนั้นจึงมั่นใจได้ว่า (ในตัวอย่างของฉัน) ทุกชื่อจะได้รับ พูดถึง -

ตัวอย่าง

ลองใช้ตัวอย่างต่อไปนี้เพื่อทำความเข้าใจ 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;

คุณจะต้องฝึกฝนให้มากขึ้นเพื่อทำความคุ้นเคยกับ JOINS นี่เป็นแนวคิดที่ซับซ้อนเล็กน้อยใน MySQL / SQL และจะชัดเจนยิ่งขึ้นในขณะที่ทำตัวอย่างจริง