การรับข้อมูลจากตารางที่เชื่อมโยงกันใน PHP
ลองมาสร้างคำสั่งค้นหาที่จะดึงข้อมูล
ผู้ใช้ทั้งหมดพร้อมกับเมืองของพวกเขากัน สำหรับการนี้
เราจะต้องใช้คำสั่ง LEFT
JOIN:
ไวยากรณ์ของมันมีลักษณะดังนี้:
SELECT ฟิลด์ FROM ชื่อ_ตาราง
LEFT JOIN ชื่อ_ตารางที่เชื่อมโยง ON เงื่อนไขการเชื่อมโยง
WHERE เงื่อนไขการเลือก
ลองมาแยกส่วนต่าง ๆ ของไวยากรณ์ คำสั่งนี้ดู
ฟิลด์
เนื่องจากเป็นการเลือกข้อมูลจากหลายตาราง
การเลือกฟิลด์ทั้งหมดผ่าน * จะไม่
ทำงาน คำสั่งค้นหาต่อไปนี้จะเลือกฟิลด์เฉพาะ
จากตารางหลัก แต่ไม่ใช่จากตารางที่เชื่อมโยง:
SELECT *
เพื่อให้ข้อมูลถูกเลือกจากทั้งหมด
ตาราง จำเป็นต้องระบุชื่อ
ตารางสำหรับการเลือกก่อน *:
SELECT users.*, cities.*
หรือสามารถระบุฟิลด์ที่เราต้องการพร้อมกับ ระบุชื่อตารางก่อนหน้าฟิลด์เหล่านั้นได้:
SELECT users.name, cities.name
สองวิธีนี้มีปัญหาอยู่ ประเด็นคือ หากฟิลด์ในตารางต่าง ๆ มีชื่อ เหมือนกัน ในอาร์เรย์ PHP จะเกิดความขัดแย้งของ ชื่อและจะมีเพียงฟิลด์เดียวที่ชนะ ส่วนฟิลด์ที่สองจะหายไป
ในการแก้ปัญหา จำเป็นต้องเปลี่ยนชื่อ
ที่ขัดแย้งกันผ่านคำสั่ง as:
SELECT users.name, cities.name as city_name
การเชื่อมโยง
หลังจากคำสั่ง ON เราต้องระบุ
ฟิลด์จากสองตาราง ซึ่งการเชื่อมโยง
ดำเนินการผ่านฟิลด์เหล่านั้น ในกรณีของเราคือฟิลด์ id
จากตารางเมืองและฟิลด์ city_id
จากตารางผู้ใช้:
ON cities.id=users.city_id
คำสั่งค้นหา
ในที่สุด คำสั่งค้นหาที่จะดึงข้อมูลผู้ใช้พร้อม กับเมืองของพวกเขาจะมีลักษณะดังนี้:
SELECT
users.name, cities.name as city_name
FROM
users
LEFT JOIN cities ON cities.id=users.city_id
งานปฏิบัติ
สมมติว่าคุณมีตารางสินค้าและตาราง หมวดหมู่ของพวกเขา เขียนคำสั่งค้นหาที่ จะดึงชื่อสินค้าพร้อมกับหมวดหมู่ของพวกเขา