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

क्वेरीज़

अब एक क्वेरी लिखते हैं, जो उपयोगकर्ता को उसके बेटे के साथ प्राप्त करेगी।

सबसे पहले, आइए उपयोगकर्ताओं को प्राप्त करें:

sqlSELECT
  *
FROM
  users

अब उपयोगकर्ताओं में उनके बेटों को जोड़ते हैं। जॉइन हम टेबल को स्वयं से करेंगे, इसलिए हमें इसका नाम बदलना होगा:

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

अब सब कुछ एक साथ रखते हैं और निम्नलिखित क्वेरी प्राप्त करते हैं:

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

एक क्वेरी लिखें जो श्रेणी को उसकी मूल श्रेणी के साथ प्राप्त करे।

Задание 3

एक क्वेरी लिखें जो श्रेणी को उसके मूल और दादा-परदादा के साथ प्राप्त करे।

Задание 4

एक क्वेरी लिखें जो श्रेणी को उसके मूल, दादा-परदादा और परदादा के साथ प्राप्त करे।