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

MySQL में पैरेंट-चाइल्ड मॉडल में गहराई की गणना करें

यह डेटाबेस में आपके पदानुक्रम के वास्तविक कार्यान्वयन पर निर्भर करता है। यदि आप नेस्टेड सेट मॉडल का उपयोग कर रहे हैं ( http://mikehillyer.com/articles/managing-hierarchical-data- in-mysql/ ) आप एकल चयन के माध्यम से पूर्ण अभिभावक-से-बाल पथ पुनर्प्राप्त कर सकते हैं।

अपडेट करें :ठीक है, चूंकि आप आसन्न सूची मॉडल के साथ जा रहे हैं, मैं तालिका में नोड स्तर को स्टोर करने का सुझाव देता हूं। यह न केवल आपको एक क्वेरी में नोड गहराई देगा, बल्कि यह आपको एक क्वेरी में उस नोड के पूरे पथ को पुनः प्राप्त करने की अनुमति देगा (यद्यपि उस क्वेरी को गतिशील रूप से जेनरेट करना होगा):

SELECT n1.name AS lvl1, n2.name as lvl2, n3.name as lvl3, ..., nN.name as lvlN
  FROM nodes AS n1
  JOIN nodes AS n2 ON n2.parent_id = n1.id
  JOIN nodes AS n3 ON n3.parent_id = n2.id
  ...
  JOIN nodes AS nN ON nN.parent_id = n(N-1).id
WHERE nN.id = myChildNode;

चूंकि आप जानते हैं कि आपका नोड स्तर एन पर है, बाएं जुड़ने की कोई आवश्यकता नहीं है और, आईडी / माता-पिता_आईडी पर उपयुक्त अनुक्रमणिका दी गई है, यह उचित रूप से तेज़ होना चाहिए।
इस दृष्टिकोण का नकारात्मक पक्ष यह है कि आपको नोड स्तर रखना होगा नोड चाल के दौरान अद्यतन किया जाता है, लेकिन यह काफी सरल और तेज़ होना चाहिए क्योंकि आप इसे केवल नोड और उसके बच्चों के लिए ही करेंगे - तालिका के अधिकांश भाग के लिए नहीं जैसा कि आप नेस्टेड सेट के साथ करेंगे।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. वैकल्पिक तालिका तालिका AUTO_INCREMENT =$x

  2. किसी दिए गए स्थान के आस-पास के निकटतम स्थानों को कुशलतापूर्वक कैसे खोजें

  3. क्या जंक्शन तालिकाओं में किसी अन्य पहचान तालिका से एक से अधिक प्राथमिक कुंजी होनी चाहिए?

  4. तंग करना? #1146 - तालिका 'xxx.xxxxx' मौजूद नहीं है

  5. एक्लिप्स ऑब्जेक्ट को डेटाटाइप टेक्स्ट के लिए डिफ़ॉल्ट मैपिंग प्रकार के रूप में क्यों प्रस्तावित करता है?