PHP में संबंधित टेबल्स से डेटा प्राप्त करना
आइए एक क्वेरी बनाते हैं जो
सभी उपयोगकर्ताओं को उनके शहरों के साथ
प्राप्त करेगी। इसके लिए
हमें LEFT
JOIN कमांड की आवश्यकता होगी:
इसका सिंटैक्स निम्नलिखित प्रकार से दिखता है:
sqlSELECT fields FROM table_name
LEFT JOIN related_table_name ON link_condition
WHERE selection_condition
आइए इस कमांड के सिंटैक्स के अलग-अलग भागों को समझते हैं।
फ़ील्ड्स
चूंकि चयन कई टेबल्स से हो रहा है,
इसलिए * के माध्यम से सभी फ़ील्ड्स का
चयन काम नहीं करेगा। निम्नलिखित क्वेरी केवल
मुख्य टेबल से फ़ील्ड्स चुनेगी,
लेकिन संबंधित टेबल से नहीं:
sqlSELECT *
ताकि डेटा सभी टेबल्स से
चुना जाए, * से पहले टेबल का नाम
निर्दिष्ट करना होगा:
sqlSELECT users.*, cities.*
या फिर हम आवश्यक फ़ील्ड्स को उनसे पहले टेबल का नाम निर्दिष्ट करके सूचीबद्ध कर सकते हैं:
sqlSELECT users.name, cities.name
इन दोनों तरीकों में एक समस्या है। मुद्दा यह है कि यदि टेबल्स में फ़ील्ड्स के नाम समान हैं, तो PHP ऐरे में नामों का टकराव हो जाएगा और केवल एक फ़ील्ड जीतेगा, और दूसरा नहीं होगा।
समस्या के समाधान के लिए टकराव वाले नामों को
as कमांड के माध्यम से बदलना होगा:
sqlSELECT users.name, cities.name as city_name
संबंध
ON कमांड के बाद हमें
दो टेबल्स से उन फ़ील्ड्स को निर्दिष्ट करना होगा,
जिनके माध्यम से संबंध स्थापित होता है।
हमारे मामले में यह id फ़ील्ड
शहरों वाली टेबल से और city_id फ़ील्ड
उपयोगकर्ताओं वाली टेबल से होगा:
sqlON cities.id=users.city_id
क्वेरी
अंतत: वह क्वेरी, जो उपयोगकर्ताओं को उनके शहरों के साथ प्राप्त करेगी, निम्नलिखित प्रकार से दिखेगी:
sqlSELECT
users.name, cities.name as city_name
FROM
users
LEFT JOIN cities ON cities.id=users.city_id
व्यावहारिक कार्य
मान लीजिए आपके पास उत्पादों की एक टेबल और उनकी श्रेणियों की एक टेबल है। एक क्वेरी लिखें जो उत्पादों के नाम उनकी श्रेणियों के साथ प्राप्त करे।