दिलचस्प पोस्ट
मैं एक सदिश में एक अनूठा_पीटर को क्यों नहीं ला सकता हूं? सी # WinForms ऐप को ट्रे से कम करने का सही तरीका क्या है? बूटस्ट्रैप 4 संजाल navbar आइटम को सही पर क्या मैं सचमुच क्लाइंट आईडी के साथ ओपन सोर्स नहीं डाल सकता हूं? HttpURL कनेक्शन के लिए शीर्षलेख जोड़ना हटायें लिंक "3" में "हटाएं" के बजाय "Get" भेजता है कैसे Firebase डेटा संशोधन को प्रतिबंधित करने के लिए? एंड्रॉइड: सर्वर कैसे उपलब्ध है? आप जावा ऑब्जेक्ट को एचटीटीपी सत्र में कैसे संग्रहीत करते हैं? आप पायथन में SQLite तालिका / स्तंभ नामों के लिए स्ट्रिंग कैसे बचते हैं? क्या अप्रयुक्त फ़ंक्शन ऑप्टिमाइज़ हो रहे हैं? एंड्रॉइड वेबव्यू में फ़ॉन्ट साइज को कैसे बदल सकता है? + ऑपरेटर कम प्रदर्शनकर्ता StringBuffer.append () से कम है इंटरनेट एक्सप्लोरर ब्राउज़र के लिए JavaScript में ऐरे सूचकांक () को ठीक कैसे करें मैं कैसे जांचूं अगर एक तत्व जावास्क्रिप्ट के साथ वास्तव में दिखाई दे रहा है?

MySQL recursion?

इस तरह एक मेज पर विचार करें:

folders_table ----------------------- INT id_folder INT id_folder_parent VARCHAR folder_name 

कौन सा एक सरल निर्देशिका संरचना भंडार। मैं एक एकल SELECT क्वेरी से एक निर्देशिका की सभी उपनिर्देशिका कैसे प्राप्त करूं?

वेब के समाधान से एकत्रित समाधान "MySQL recursion?"

यह संभव है, लेकिन आपको अपना डेटाबेस संरचना बदलने की आवश्यकता है; एक बार परिवर्तन किए जाने के बाद, आप एक क्वेरी में किसी भी गहराई का एक पेड़ पुनः प्राप्त कर सकते हैं। प्रश्न थोड़ा अधिक जटिल हैं, लेकिन यह अभी भी बहुत सरल है।

  • एक डाटाबेस (साइट पॉइंट) में पदानुक्रमित डेटा को संग्रहित करना – यह आलेख चरण-दर-चरण है, बहुत स्पष्ट है
  • MySQL में पदानुक्रमित डेटा का प्रबंधन – उपरोक्त के रूप में स्पष्ट नहीं है

आपके द्वारा दिखाया गया तालिका संरचना के साथ, यह MySQL के साथ नहीं किया जा सकता क्योंकि यह पुनरावर्ती क्वेरीज़ का समर्थन नहीं करता है

MySql / MariaDB के साथ आप ओपन क्वरी ग्राफ़ इंजिन ( http://openquery.com/graph/doc ) का उपयोग कर सकते हैं जो कि एक मायसक्ल प्लगइन है, जिससे आप एक विशेष टेबल बना सकते हैं जहां आप रिश्तों को डालते हैं, मूल रूप से माता-पिता और childId।

जादू यह है कि आप इस तालिका को क्वेरी से पारित मूल्य के आधार पर एक विशेष कॉलम कूड़ेदान के साथ पूछते हैं जो OQGRAPH इंजन को निष्पादित करने के लिए कहेंगे। विवरण के लिए दस्तावेज़ देखें

यह न केवल पेड़ (पुनरावर्ती 1-एन संबंध) को संभालता है, लेकिन वजन के साथ ग्राफ़ डेटा संरचना (रिकर्सिव एनएम रिश्ते) (उदाहरण के लिए सोचें कि आप कंपनियों की स्वामित्व को संग्रहित करना चाहते हैं, एक कंपनी कई सहायक हो सकती है और इसमें कई शेयरधारक भी हो सकते हैं)।

दूसरा विकल्प नोड की गहराई को संग्रहीत करना और प्रत्येक नोड के पूरा पथ के लिए एक पहचानकर्ता रखना और इन दोनों को मापदंड के रूप में उपयोग करना है।

जिस तरह से मैं एक संबंधपरक डेटाबेस में एक्सएमएल नोड्स को स्टोर करता हूं, वह निम्नलिखित है:

 SELECT id,value FROM element e1 INNER JOIN element e2 ON (e2.id=e1.parent_id AND name='friend') WHERE e1.depth>4 AND e1.path like 'root[1]/users[1]/user:dana[1]/public[1]%' 

इस उदाहरण में, मुझे नोड नाम के लिए एक फ़ील्ड मिला है और पेड़ में प्रत्येक स्तर पर समान नोड नाम वाले डुप्लिकेट नोड्स के लिए स्क्वायर कोष्ठ में एक इंटरएटर मिला है।

जब आप प्रत्येक नोड को सम्मिलित करते हैं, तो आपको रूट के आधार पर प्रत्येक स्तर को सरणी में जोड़कर रूट नोड (माता-पिता parent_id IS NULL ) को माता-पिता का पालन करके पूर्ण पथ की गणना करना होगा, एक ही समय में पथ की गहराई को संग्रहीत करना होगा।

प्रत्येक अनुरोध पर वृक्ष का अनुसरण करते हुए विज़ुअल प्रस्तुतीकरण और किसी भी रास्ते में आसान पहुंच रखने के लिए डेटाबेस में संग्रहीत किसी भी प्रकार के पदानुक्रम में हमेशा अच्छा होता है, विशेष रूप से mysql के साथ जो किसी भी प्रत्यक्ष पुनरावर्ती SQL सिंटैक्स नहीं होता है

पदानुक्रम (नेस्टेड सेट एडैसेंसी लिस्ट) में नोड्स के भंडारण की बायां / दायां योजना मेरे दिमाग में बहुत खतरनाक है और इस तरह की योजना में बहुत अधिक गलत हो सकता है, क्योंकि यह प्रबंधन करने में बहुत जटिल है।