"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > मैं MySQL क्वेरी परिणामों के साथ PHP का उपयोग करके मूल नोड के अंतर्गत सभी बच्चे, पोते और वंशज नोड्स को कैसे पुनः प्राप्त करूं?

मैं MySQL क्वेरी परिणामों के साथ PHP का उपयोग करके मूल नोड के अंतर्गत सभी बच्चे, पोते और वंशज नोड्स को कैसे पुनः प्राप्त करूं?

2024-11-17 को प्रकाशित
ब्राउज़ करें:126

How do I retrieve all child, grandchild, and descendant nodes under a parent node using PHP with MySQL query results?

MySQL क्वेरी परिणामों के साथ PHP का उपयोग करके माता-पिता के अंतर्गत सभी बच्चे, पोते, आदि नोड्स प्राप्त करें

मूल मुद्दा:

पदानुक्रमित डेटा संरचनाओं के साथ काम करते समय मूल नोड से जुड़े सभी बच्चे, पोते और बाद के वंशज नोड्स को पुनर्प्राप्त करना एक सामान्य कार्य है। यह समस्या उन परिदृश्यों में उत्पन्न होती है जहां डेटाबेस तालिकाएँ डेटा संगठन के लिए एक आसन्न सूची मॉडल का उपयोग करती हैं। दृष्टिकोण। इस लक्ष्य को प्राप्त करने के लिए रिकर्सन को कैसे नियोजित किया जा सकता है, इसकी विस्तृत व्याख्या यहां दी गई है:

1. बेस फ़ंक्शन की स्थापना:

एक पुनरावर्ती फ़ंक्शन वह है जो किसी समस्या को हल करने के लिए स्वयं को कॉल करता है और अक्सर पदानुक्रमित या नेस्टेड डेटा संरचनाओं वाले परिदृश्यों में उपयोग किया जाता है। इस उदाहरण में, हमारे बेस फ़ंक्शन का नाम Fetch_recursive होगा।

2। पुनरावर्ती कॉल के लिए मानदंड की पहचान करना:

fetch_recursive के भीतर, दो प्राथमिक स्थितियाँ निर्धारित करती हैं कि पुनरावर्ती कॉल कब की जाती हैं:

पैरेंट नोड मिला:

जब मूल्यांकन किया जा रहा वर्तमान नोड वह मूल नोड है जिसमें हम रुचि रखते हैं (प्रदान की गई आईडी के आधार पर)।

    चाइल्ड नोड मिला:
  • जब वर्तमान नोड में एक मूल आईडी होती है जो मूल नोड आईडी से मेल खाती है .
  • 3. परिणाम सरणी का निर्माण:
  • हर बार जब एक पुनरावर्ती कॉल किया जाता है, तो फ़ंक्शन वर्तमान नोड से प्रासंगिक डेटा के साथ एक परिणाम सरणी पॉप्युलेट करेगा। जैसे-जैसे पुनरावर्ती कॉल वृक्ष संरचना को पार करेंगी, यह सरणी पुनरावर्ती रूप से बढ़ेगी।

4। चाइल्ड नोड्स की पुनरावर्ती खोज:

यदि वर्तमान नोड में कोई चाइल्ड नोड है (बच्चों की संपत्ति के अस्तित्व से पहचाना जाता है), तो उन चाइल्ड नोड्स को पुनः प्राप्त करने के लिए एक और पुनरावर्ती कॉल की जाएगी। यह प्रक्रिया तब तक जारी रहती है जब तक कि मूल नोड के सभी चाइल्ड नोड्स कैप्चर नहीं कर लिए जाते।

अतिरिक्त कार्यक्षमता:

1. पोते-पोतियों और वंशजों को संभालना:

fetch_recursive की पुनरावर्ती प्रकृति यह सुनिश्चित करती है कि यह स्वचालित रूप से पदानुक्रम को पार कर जाएगी और न केवल बच्चे के नोड्स बल्कि पोते-पोतियों और उसके बाद के वंशजों को भी पुनः प्राप्त करेगी।

2 . एकीकृत परिणाम:

सभी पुनरावर्ती कॉल पूर्ण होने के बाद, फ़ंक्शन एक एकल, व्यापक सरणी देता है जिसमें निर्दिष्ट मूल नोड के तहत सभी वंशज नोड्स होते हैं।

कोड कार्यान्वयन:

फ़ंक्शन फ़ेच_रिकर्सिव($src_arr, $currentid, $parentfound = false, $cats = array()) { foreach($src_arr $row के रूप में) { यदि((!$parentfound && $row['id'] == $currentid) || $row['parent_id'] == $currentid) { $rowdata = सरणी(); foreach($row as $k => $v) $rowdata[$k] = $v; $बिल्लियाँ[] = $rowdata; अगर($row['parent_id'] == $currentid) $cats = array_merge($cats,fetch_recursive($src_arr, $row['id'], true)); } } वापसी $बिल्लियाँ; }

उपयोग:

function fetch_recursive($src_arr, $currentid, $parentfound = false, $cats = array())
{
    foreach($src_arr as $row)
    {
        if((!$parentfound && $row['id'] == $currentid) || $row['parent_id'] == $currentid)
        {
            $rowdata = array();
            foreach($row as $k => $v)
                $rowdata[$k] = $v;
            $cats[] = $rowdata;
            if($row['parent_id'] == $currentid)
                $cats = array_merge($cats, fetch_recursive($src_arr, $row['id'], true));
        }
    }
    return $cats;
}

$list =fetch_recursive($data, 3);यह एक सरणी के साथ $list वैरिएबल को पॉप्युलेट करेगा सभी प्रासंगिक नोड्स युक्त।

नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3