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

एक पेड़ की वस्तुओं की गिनती पूछना

उन बाधाओं को देखते हुए, कोई रास्ता नहीं है। ऐसी स्थिति में आप या तो सभी . को पुनः प्राप्त करेंगे पेड़ और एक 'पहाड़ी' ग्राहक पक्ष का निर्माण करें, या पुनरावर्ती प्रश्नों को निष्पादित करें, जो विशिष्ट मामले में सबसे अधिक प्रदर्शन करने वाला होगा।

पदानुक्रम स्तरों की एक निश्चित संख्या होने . की अतिरिक्त बाधा के साथ , आप इसे एक से अधिक जॉइन के साथ कर सकते हैं।

सामान्य स्थिति में, उन बाधाओं पर काबू पाने की अनुमति देने के लिए कई संरचना संशोधन होते हैं। व्यवहार में आप अतिरिक्त फ़ील्ड जोड़ने की अनुमति देते हुए "यह मेरी तालिका संरचना है" बाधा को शिथिल करते हैं।

उदाहरण के लिए, आप नोड संरचना को left_id . के साथ पूरक कर सकते हैं मान, और सुनिश्चित करें कि जब आप ट्री डेप्थ-फर्स्ट पर जाते हैं तो सभी नोड आईडी क्रम में होते हैं:

1 --- 2 -+- 3 -+- 4
         |     |
         |     +- 5
         +- 6 --- 7

इस स्थिति में, नोड 3 "5" मान को संग्रहीत करेगा, नोड 6 मान "7" को संग्रहीत करेगा, और नोड 2 मान "7" को भी संग्रहीत करेगा। प्रत्येक नोड अपने बच्चों के वामपंथियों और अपनी आईडी के बीच अधिकतम संग्रह करता है

तो निःसंतान नोड्स में उनकी आईडी के बराबर वामपंथी है। नोड 1 में लेफ्टिड 7 होगा क्योंकि यह 2 का लेफ्टआईडी है, जो इसे 6 से मिला है।

इस स्थिति में, गिनती अनुक्रम में कोई छेद नहीं होने पर नोड्स आसान है; नोड के सभी वंशज वे नोड होते हैं जिनकी आईडी प्रारंभिक नोड की आईडी और उसके बाएं आईडी के बीच होती है; और पत्तों की पहचान आईडी के बराबर वामपंथी होने से होती है।

तो "नोड आईडी 17 से उतरने वाले सभी पत्ते" होंगे

बच्चे का चयन करें। * तालिका से माता-पिता के रूप में तालिका से बच्चे के रूप में शामिल हों (child.id> parent.id और child.id <=parent.leftid ) /* वंशज /कहां child.id =child.leftid / पत्ता /और parent.id =17; / माता-पिता 17 साल के हैं

यदि आप प्रून और शाखा करने में सक्षम होना चाहते हैं तो यह संरचना बनाए रखने के लिए अजीब है, क्योंकि आपको प्रून के बिंदु से शाखा के बिंदु के साथ-साथ स्थानांतरित नोड्स के बीच सभी नोड्स को फिर से संख्याबद्ध करने की आवश्यकता है।

एक और संभावना है कि यदि आप केवल गिनने में रुचि रखते हैं तो बच्चे के काउंटर को रखना है। इसे पुनरावृत्त रूप से अद्यतन करके, सभी पत्तियों का चयन करके और उनके काउंटर को 0 पर सेट करके बनाए रखा जा सकता है (आप बाएं जॉइन के माध्यम से पत्तियों की पहचान करते हैं); फिर वे सभी माता-पिता जिनके पास NULL काउंटर हैं, जिनके पास गैर-NULL काउंटर वाले बच्चे हैं, अपने काउंटरों को SUM() में अपडेट कर रहे हैं बच्चों के काउंटरों के साथ-साथ COUNT() खुद बच्चों की; और तब तक जारी रहता है जब तक कि अद्यतन पंक्तियों की संख्या शून्य न हो जाए, क्योंकि सभी नोड्स में गैर-नल काउंटर होते हैं। एक छंटाई-और-शाखा के बाद, आप बस सभी काउंटरों को NULL पर सेट करें और दोहराएं।

इस अंतिम दृष्टिकोण में प्रत्येक पदानुक्रम स्तर के लिए एक चिंतनशील जुड़ाव खर्च होता है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एकाधिक पंक्तियों को एक पंक्ति में और mysql पर एकाधिक स्तंभों को मर्ज करना

  2. MySQL के साथ, मैं किसी तालिका में रिकॉर्ड अनुक्रमणिका वाला स्तंभ कैसे उत्पन्न कर सकता हूं?

  3. डंप फ़ाइल MySQL 5.6.10

  4. एंड्रॉइड ऐप को बाहरी MySQL डीबी के साथ कैसे संवाद करना है?

  5. MySQL में सबस्ट्रिंग () का उपयोग कैसे करें