การรับข้อมูลจากตารางที่เชื่อมโยงกันใน PHP

ลองมาสร้างคำสั่งค้นหาที่จะดึงข้อมูล ผู้ใช้ทั้งหมดพร้อมกับเมืองของพวกเขากัน สำหรับการนี้ เราจะต้องใช้คำสั่ง LEFT JOIN:

ไวยากรณ์ของมันมีลักษณะดังนี้:

sqlSELECT ฟิลด์ FROM ชื่อ_ตาราง
  LEFT JOIN ชื่อ_ตารางที่เชื่อมโยง ON เงื่อนไขการเชื่อมโยง
WHERE เงื่อนไขการเลือก

ลองมาแยกส่วนต่าง ๆ ของไวยากรณ์ คำสั่งนี้ดู

ฟิลด์

เนื่องจากเป็นการเลือกข้อมูลจากหลายตาราง การเลือกฟิลด์ทั้งหมดผ่าน * จะไม่ ทำงาน คำสั่งค้นหาต่อไปนี้จะเลือกฟิลด์เฉพาะ จากตารางหลัก แต่ไม่ใช่จากตารางที่เชื่อมโยง:

sqlSELECT *

เพื่อให้ข้อมูลถูกเลือกจากทั้งหมด ตาราง จำเป็นต้องระบุชื่อ ตารางสำหรับการเลือกก่อน *:

sqlSELECT users.*, cities.*

หรือสามารถระบุฟิลด์ที่เราต้องการพร้อมกับ ระบุชื่อตารางก่อนหน้าฟิลด์เหล่านั้นได้:

sqlSELECT users.name, cities.name

สองวิธีนี้มีปัญหาอยู่ ประเด็นคือ หากฟิลด์ในตารางต่าง ๆ มีชื่อ เหมือนกัน ในอาร์เรย์ PHP จะเกิดความขัดแย้งของ ชื่อและจะมีเพียงฟิลด์เดียวที่ชนะ ส่วนฟิลด์ที่สองจะหายไป

ในการแก้ปัญหา จำเป็นต้องเปลี่ยนชื่อ ที่ขัดแย้งกันผ่านคำสั่ง as:

sqlSELECT users.name, cities.name as city_name

การเชื่อมโยง

หลังจากคำสั่ง ON เราต้องระบุ ฟิลด์จากสองตาราง ซึ่งการเชื่อมโยง ดำเนินการผ่านฟิลด์เหล่านั้น ในกรณีของเราคือฟิลด์ id จากตารางเมืองและฟิลด์ city_id จากตารางผู้ใช้:

sqlON cities.id=users.city_id

คำสั่งค้นหา

ในที่สุด คำสั่งค้นหาที่จะดึงข้อมูลผู้ใช้พร้อม กับเมืองของพวกเขาจะมีลักษณะดังนี้:

sqlSELECT
  users.name, cities.name as city_name
FROM
  users
LEFT JOIN cities ON cities.id=users.city_id

งานปฏิบัติ

Задание 1

สมมติว่าคุณมีตารางสินค้าและตาราง หมวดหมู่ของพวกเขา เขียนคำสั่งค้นหาที่ จะดึงชื่อสินค้าพร้อมกับหมวดหมู่ของพวกเขา