आप सबसे अधिक संभावना नेस्टेड सेट करना चाहेंगे। वे सेट अप करने के लिए थोड़ा मुश्किल हैं, लेकिन प्रश्नों को बहुत आसान बनाते हैं। तो, श्रेणी पैरेंट के बजाय, आपके पास दो कॉलम होंगे - lft
और rgt
. बाएँ और दाएँ मूल रूप से एक श्रेणी की सीमाएँ हैं, यदि किसी आइटम की श्रेणी आईडी उन मानों के बीच है, तो आप जानते हैं कि वह उस श्रेणी का एक बच्चा है।
+----+---------------+-----+------+
| id | category name | lft | rgt |
+----+---------------+-----+------+
| 1 | cars | 1 | 24 |
+----+---------------+-----+------+
| 2 | bmw | 2 | 3 |
+----+---------------+-----+------+
| 5 | audi | 4 | 23 |
+----+---------------+-----+------+
| 6 | 100 | 5 | 6 |
+----+---------------+-----+------+
| 7 | 80 | 7 | 8 |
+----+---------------+-----+------+
| 8 | A4 | 9 | 22 |
+----+---------------+-----+------+
| 9 | TDI | 10 | 11 |
+----+---------------+-----+------+
| 10 | Quatro | 12 | 21 |
+----+---------------+-----+------+
| 11 | Black | 13 | 18 |
+----+---------------+-----+------+
| 12 | White | 19 | 20 |
+----+---------------+-----+------+
| 13 | 2 doors | 14 | 15 |
+----+---------------+-----+------+
| 14 | 5 doors | 16 | 17 |
+----+---------------+-----+------+
फिर, कार श्रेणी में मदों की संख्या प्राप्त करने के लिए, आप इसे इस तरह से सुपर कर सकते हैं:
SELECT categories.name, items.id, items.category_id, items.name
FROM categories
LEFT JOIN items
ON (items.category_id BETWEEN categories.lft AND categories.rgt)
WHERE categories.category_name = 'cars'
जाहिर है आप केवल category_name
. का मान बदल सकते हैं और किसी भी श्रेणी में आइटम प्राप्त करें।
क्षमा करें, किसी कारण से जब मैंने इसे यहां अपलोड किया था, तो छवि को घुमाया गया था, लेकिन यदि आप अपनी श्रेणियों को मंडलियों के रूप में निकालते हैं, और फिर पंक्तियों को क्रमांकित करते हैं, तो आप देख सकते हैं कि बाएं और दाएं के लिए मान क्या होना चाहिए।
मैंने केवल कारें ही कीं क्योंकि मुझे लगा कि आप अन्य श्रेणियों को प्राप्त करने के लिए एक्सट्रपलेशन कर सकते हैं।
तो अगर आप अपनी श्रेणियां इस तरह लिखते हैं:
Cars(BMW(), Audi(100(),80(),A4(TDI(),Quatro(Black(2dr(),5dr()), White())))
फिर आप अपने कोष्ठक को संख्याओं के साथ लेबल कर सकते हैं:
Cars[1]->(BMW[2]->()<-[3], Audi[4]->(100[5]->()<-[6],80[7]->()<-[8],A4[9]->(TDI[10]->()<-[11],Quatro[12]->(Black[13]->(2dr[14]->()<-[15], 5dr[16]->()<-[17])<-[18], White[19]->()<-[20])<-[21])<-[22])<-[23])<-[24]
या यदि आप इसे एक पेड़ के रूप में चार्ट करते हैं, तो आप इसे इस तरह से लेबल कर सकते हैं, जहां आप सबसे बाएं नोड को एक संख्या के साथ लेबल करते हैं, और केवल सही नोड को लेबल करते हैं जब आपने इसके सभी बच्चों को लेबल किया है: