Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

श्रेणी और उसके बच्चे के सभी आइटम प्राप्त करें

आप सबसे अधिक संभावना नेस्टेड सेट करना चाहेंगे। वे सेट अप करने के लिए थोड़ा मुश्किल हैं, लेकिन प्रश्नों को बहुत आसान बनाते हैं। तो, श्रेणी पैरेंट के बजाय, आपके पास दो कॉलम होंगे - 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]

या यदि आप इसे एक पेड़ के रूप में चार्ट करते हैं, तो आप इसे इस तरह से लेबल कर सकते हैं, जहां आप सबसे बाएं नोड को एक संख्या के साथ लेबल करते हैं, और केवल सही नोड को लेबल करते हैं जब आपने इसके सभी बच्चों को लेबल किया है:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. TableGateway का उपयोग करके ZF2 में लेफ्ट जॉइन करें

  2. जब कोई पासवर्ड नहीं दिया जाता है तो MySQL रूट लॉगिन को कैसे निष्क्रिय करें?

  3. MySQL में टाइमज़ोन ऑफ़सेट स्टोर करने के लिए डेटाटाइप/संरचना

  4. Mysql Dump के साथ दृश्यों का बैकअप लेना

  5. MySQL में RLIKE ऑपरेटर कैसे काम करता है