PHP में डेटा के पारिवारिक संबंध
मान लीजिए कि हमारे सामने पिताओं और बेटों को संग्रहीत करने का कार्य है। मान लीजिए कि प्रत्येक पिता के पास केवल एक बेटा हो सकता है, और बेटा बदले में एक बेटा भी रख सकता है।
हमें यह सोचने की जरूरत है कि हम डेटा कैसे संग्रहीत करेंगे।
पहला विचार, जो दिमाग में आ सकता है
- दो टेबल बनाना: parents
पिताओं के लिए और sons बेटों के लिए। फिर इन टेबलों को किसी फ़ील्ड से लिंक करें: son_id
या parent_id।
हालाँकि, यह विचार बहुत अच्छा नहीं है - क्योंकि एक ही व्यक्ति एक साथ पिता और बेटा दोनों हो सकता है - और उसे संग्रहीत करना होगा दोनों टेबल में, और यह असुविधाजनक है, अधिक जगह लेता है और आसानी से त्रुटियों की ओर ले जाता है।
एक बेहतर विकल्प - टेबल को स्वयं से लिंक करना:
हम एक टेबल users बनाते हैं, इसमें
हम सभी उपयोगकर्ताओं को संग्रहीत करेंगे और प्रत्येक के लिए एक फ़ील्ड son_id बनाएंगे,
जिसमें संग्रहीत किया जाएगा
id इसी टेबल से बेटे का:
| 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
व्यावहारिक कार्य
मान लीजिए कि हमारे पास श्रेणियाँ हैं। प्रत्येक श्रेणी एक मूल श्रेणी से संबंधित हो सकती है, और वह बदले में अपनी मूल श्रेणी से संबंधित हो सकती है और इसी तरह आगे भी। भंडारण संरचना का वर्णन करें।
एक क्वेरी लिखें जो श्रेणी को उसकी मूल श्रेणी के साथ प्राप्त करे।
एक क्वेरी लिखें जो श्रेणी को उसके मूल और दादा-परदादा के साथ प्राप्त करे।
एक क्वेरी लिखें जो श्रेणी को उसके मूल, दादा-परदादा और परदादा के साथ प्राप्त करे।