⊗ppPmDOLVT 384 of 447 menu

PHP में लिंकिंग टेबल के माध्यम से संबंध

अब मान लीजिए कि उपयोगकर्ता अलग-अलग शहरों में रहा है। इस स्थिति में उपयोगकर्ताओं की टेबल इस प्रकार दिख सकती है:

users
id name city
1 user1 city1, city2, city3
2 user2 city1, city2
3 user3 city2, city3
4 user4 city1

यह स्पष्ट है कि इस तरह डेटा स्टोर करना गलत है - शहरों को एक अलग टेबल में रखा जाना चाहिए। यह रही वह टेबल:

cities
id name
1 city1
2 city2
3 city3

हालाँकि, हमें यह सुनिश्चित करना होगा कि प्रत्येक उपयोगकर्ता कई शहरों को संदर्भित कर सके। यह दो टेबलों के साथ करना असंभव है।

हमें एक तथाकथित लिंकिंग टेबल पेश करने की आवश्यकता होगी, जो उपयोगकर्ता को उसके शहरों से जोड़ेगी।

इस टेबल की प्रत्येक एंट्री में एक उपयोगकर्ता और एक शहर के बीच का संबंध संग्रहीत होगा। इसके साथ ही एक उपयोगकर्ता के लिए इस टेबल में उतनी ही एंट्रीज होंगी, जितने शहरों में वह रहा है।

यह रही हमारी लिंकिंग टेबल:

users_cities
id user_id city_id
1 1 1
2 1 2
3 1 3
4 2 1
5 2 2
6 3 2
7 3 3
8 4 1

उपयोगकर्ताओं की टेबल केवल उपयोगकर्ता नाम स्टोर करेगी, बिना किसी लिंक के:

users
id name
1 user1
2 user2
3 user3
4 user4
5 user5

क्वेरीज

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

SELECT users.name as user_name, cities.name as city_name FROM users LEFT JOIN users_cities ON users_cities.user_id=users.id LEFT JOIN cities ON users_cities.city_id=cities.id

क्वेरी का परिणाम

PHP में हमारी क्वेरी का परिणाम प्रत्येक उपयोगकर्ता का नाम उतनी बार शामिल करेगा, जितने शहरों से वह जुड़ा हुआ है:

<?php $arr = [ ['user_name' => 'user1', 'city_name' => 'city1'], ['user_name' => 'user1', 'city_name' => 'city2'], ['user_name' => 'user1', 'city_name' => 'city3'], ['user_name' => 'user2', 'city_name' => 'city1'], ['user_name' => 'user2', 'city_name' => 'city2'], ['user_name' => 'user3', 'city_name' => 'city2'], ['user_name' => 'user3', 'city_name' => 'city3'], ['user_name' => 'user4', 'city_name' => 'city1'], ]; ?>

ऐसी ऐरे को रूपांतरित करना और इसे निम्नलिखित में बदलना अधिक सुविधाजनक होगा:

<?php $res = [ ['user1' => ['city1', 'city2', 'city3']], ['user2' => ['city1', 'city2']], ['user3' => ['city2', 'city3']], ['user4' => ['city1']], ]; ?>

आइए ऐसा रूपांतरण करने वाला कोड लिखते हैं:

<?php $res = []; foreach ($data as $elem) { $res[$elem['user_name']][] = $elem['city_name']; } var_dump($res); ?>

व्यावहारिक कार्य

मान लीजिए कि एक उत्पाद कई श्रेणियों से संबंधित हो सकता है। स्टोरेज संरचना लिखें।

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

प्राप्त डेटा को एक ul सूची के रूप में प्रदर्शित करें ताकि प्रत्येक li में सबसे पहले उत्पाद का नाम हो, और उसके बाद कोलन के बाद कॉमा से उस उत्पाद की श्रेणियों की सूची हो। कुछ इस तरह:

<ul> <li>product1: category1, category2, category3</li> <li>product2: category1, category3</li> <li>product3: category1</li> </ul>
हिन्दी
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
हम साइट के कार्य, विश्लेषण और व्यक्तिगतकरण के लिए कुकीज़ का उपयोग करते हैं। डेटा प्रसंस्करण गोपनीयता नीति के अनुसार किया जाता है।
सभी स्वीकार करें कॉन्फ़िगर करें अस्वीकार करें