PHP တွင် ဒေတာ ဆွေမျိုးသားချင်း ဆက်သွယ်မှုများ

ကျွန်ုပ်တို့ရှေ့တွင် အဖေများနှင့် သားများကို သိမ်းဆည်းရန် တာဝန်ရှိသည်ဆိုပါစို့။ အဖေတစ်ဦးစီတွင် သားတစ်ဦးသာရှိပြီး၊ သားကလည်း ၎င်း၏ကိုယ်ပိုင်သားတစ်ဦး ရှိနိုင်သည်ဟု ဆိုကြပါစို့။

ဒေတာများကို မည်သို့သိမ်းဆည်းမည်ကို စဉ်းစားရန် လိုအပ်ပါသည်။ ပထမဆုံးပေါ်လာနိုင်သော စိတ်ကူးမှာ ဇယားနှစ်ခု ပြုလုပ်ရန် ဖြစ်သည် - အဖေများအတွက် parents နှင့် သားများအတွက် sons။ ထို့နောက် ဤဇယားများကို တစ်စုံတစ်ရာ အကွက်ဖြင့် ချိတ်ဆက်ရန် - son_id သို့မဟုတ် parent_id။

သို့သော် ဤစိတ်ကူးသည် မကောင်းလှပါ - အဘယ်ကြောင့်ဆိုသော် တစ်ဦးတည်းသောလူသည် တစ်ချိန်တည်းတွင် အဖေလည်းဖြစ်နိုင်၊ သားလည်းဖြစ်နိုင်ပြီး - သူ့ကို ဇယားနှစ်ခုလုံးတွင် သိမ်းဆည်းရန် လိုအပ်မည်၊ ထိုသို့ဖြစ်လျှင် မအီမသာဖြစ်စေပြီး၊ နေရာပိုယူကာ အမှားများ ဖြစ်လွယ်စေပါသည်။

ပိုမိုကောင်းမွန်သော ရွေးချယ်စရာမှာ ဇယားကို ၎င်း၏ကိုယ်တိုင်နှင့် ချိတ်ဆက်ရန်ဖြစ်သည် - users ဇယားတစ်ခု ပြုလုပ်ပါမည်၊ ထို့အတွင်း၌ user အားလုံးကို သိမ်းဆည်းပြီး တစ်ဦးစီအတွက် son_id အကွက်ပြုလုပ်ကာ၊ ထိုအကွက်အတွင်း၌ ထိုဇယားထဲမှပင် သား၏ id ကို သိမ်းဆည်းမည်။

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

Query များ

ယခု user နှင့် ၎င်း၏သားကို အတူတကွ ထုတ်ယူမည့် query တစ်ခု ရေးကြပါစို့။

စတင်ရန် အနေဖြင့် user များကိုသာ ထုတ်ယူကြည့်ကြပါစို့။

sqlSELECT
  *
FROM
  users

ယခု user များနှင့် ၎င်းတို့၏သားများကို join လုပ်ကြပါမည်။ ဇယားကို ၎င်း၏ကိုယ်တိုင်နှင့် join လုပ်မည်ဖြစ်သောကြောင့် ၎င်း၏အမည်ပြောင်းလဲရန် လိုအပ်ပါသည်။

sqlLEFT JOIN users as sons

ယခု ပင်မ ဇယားနှင့် အမည်ပြောင်းထားသော ဇယားတို့၏ ဆက်သွယ်မှုကို သတ်မှတ်နိုင်ပါသည်။

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

ယခု အကွက်များကို သတ်မှတ်ကြပါစို့။

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

အားလုံးကို စုစည်းပြီး အောက်ပါ query ကို ရရှိပါမည်။

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

လက်တွေ့လေ့ကျင့်ခန်းများ

Задание 1

ကျွန်ုပ်တို့တွင် ကဏ္ဍများ ရှိသည်ဆိုပါစို့။ ကဏ္ဍတစ်ခုစီသည် မိဘကဏ္ဍတစ်ခုနှင့် သက်ဆိုင်နိုင်ပြီး၊ ထိုမိဘကဏ္ဍကလည်း ၎င်း၏ကိုယ်ပိုင်မိဘကဏ္ဍနှင့် သက်ဆိုင်နိုင်သည်၊ ဤသို့ဖြင့် ဆက်သွားနိုင်သည်။ သိမ်းဆည်းမှု ဖွဲ့စည်းပုံကို ရေးပြပါ။

Задание 2

ကဏ္ဍတစ်ခုကို ၎င်း၏ မိဘကဏ္ဍနှင့်အတူ ထုတ်ယူမည့် query တစ်ခုကို ရေးပါ။

Задание 3

ကဏ္ဍတစ်ခုကို ၎င်း၏ မိဘနှင့် အဘိုးကြီး (မိဘ၏မိဘ) တို့နှင့်အတူ ထုတ်ယူမည့် query တစ်ခုကို ရေးပါ။

Задание 4

ကဏ္ဍတစ်ခုကို ၎င်း၏ မိဘ၊ အဘိုးကြီး နှင့် အဘေးကြီး (အဘိုး၏မိဘ) တို့နှင့်အတူ ထုတ်ယူမည့် query တစ်ခုကို ရေးပါ။