⊗ppPmDOFR 385 of 447 menu

ความสัมพันธ์เชิงลำดับชั้นของข้อมูลใน PHP

สมมติว่าเรามีโจทย์ที่ต้องเก็บข้อมูลเกี่ยวกับพ่อ และลูกชาย สมมติว่าพ่อแต่ละคนสามารถมี ลูกชายได้เพียงคนเดียว และลูกชายก็สามารถ มีลูกชายได้หนึ่งคนเช่นกัน

เราต้องคิดว่าจะจัดเก็บข้อมูลอย่างไร แนวคิดแรกที่น่าจะนึกถึง - คือสร้างสองตาราง: parents สำหรับ พ่อ และ sons สำหรับลูกชาย จากนั้นเชื่อมโยง ตารางเหล่านี้ด้วยฟิลด์บางอย่าง: son_id หรือ parent_id

อย่างไรก็ตาม นี่ไม่ใช่แนวคิดที่ดีนัก - เพราะ บุคคลเดียวกันอาจเป็นได้ทั้ง พ่อและลูกชาย - และเราจะต้องเก็บข้อมูลของเขา ในทั้งสองตาราง ซึ่งนี่ไม่สะดวก ใช้พื้นที่ มากกว่า และอาจนำไปสู่ข้อผิดพลาดได้ง่าย

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

users
id name son_id
1 user1 2
2 user2 3
3 user3 null

แบบสอบถาม (Queries)

ตอนนี้เรามาเขียนคำสั่งเพื่อดึงข้อมูล ผู้ใช้พร้อมกับลูกชายของเขากัน

เริ่มต้นด้วยการดึงข้อมูลผู้ใช้:

SELECT * FROM users

ตอนนี้เรา join ข้อมูลลูกชายเข้ากับผู้ใช้ เรา จะ join ตารางกับตัวมันเอง ดังนั้นเราจึง ต้องทำการเปลี่ยนชื่อตาราง:

LEFT JOIN users as sons

ตอนนี้เราสามารถระบุความสัมพันธ์ระหว่างตารางหลัก และตารางที่เปลี่ยนชื่อแล้วได้:

LEFT JOIN users as sons ON sons.id=users.son_id

ต่อไปเราจะระบุฟิลด์ที่ต้องการ:

SELECT users.name as user_name, sons.name as son_name

นำทุกส่วนมารวมกันและเราจะได้คำสั่งดังต่อไปนี้:

SELECT users.name as user_name, sons.name as son_name FROM users LEFT JOIN users as sons ON sons.id=users.son_id

โจทย์ฝึกปฏิบัติ

สมมติว่าเรามีหมวดหมู่ แต่ละหมวดหมู่ สามารถอยู่ภายใต้หมวดหมู่แม่ได้ และหมวดหมู่แม่นั้นก็มีหมวดหมู่แม่ของตัวเองได้อีก และเป็นเช่นนี้เรื่อยไป อธิบายโครงสร้างการจัดเก็บ

เขียนคำสั่งเพื่อดึงข้อมูลหมวดหมู่ พร้อมกับหมวดหมู่แม่ของมัน

เขียนคำสั่งเพื่อดึงข้อมูลหมวดหมู่ พร้อมกับหมวดหมู่แม่และหมวดหมู่ยาย (ระดับถัดไป) ของมัน

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

ไทย
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣTürkmenTürkçeЎзбекOʻzbekTiếng Việt
เราใช้คุกกี้สำหรับการทำงานของเว็บไซต์ การวิเคราะห์ และการปรับเนื้อหาให้เหมาะสมส่วนบุคคล การประมวลผลข้อมูลเกิดขึ้นตาม นโยบายความเป็นส่วนตัว.
ยอมรับทั้งหมด ปรับแต่ง ปฏิเสธ