2012-05-18 11 views
20

मैं सामग्री तालिका है कि इस तरह की स्थापना की है के एक बिल है बनाने के लिए:
आइटम - जब मैं सामग्री के बिल को प्रदर्शित किया जाता है माता पिताMySQL क्वेरी का उपयोग करना पंक्तियों पार करने के लिए एक पुनरावर्ती पेड़

अंतिम परिणाम यह है कि इस तरह प्रदर्शित होता है:

item 1 - parent 0  
    item 2 - parent 1  
    item 3 - parent 1  

अंतिम परिणाम भी इस तरह बहु स्तर हो सकता है:

item 3 - parent 0  
    item 4 - parent 3  
    item 76 - parent 3  

और यह अनंत तक पर जा सकते हैं:

item 76 - parent 0  
    item 46 - parent 76  

item 46 - parent 0  
    item 25 - parent 46 

अभी, मैं या तो सिर्फ 1 स्तर डेटाबेस से मिलती है:

SELECT * FROM bom WHERE parentId = $itemId (shorthand)

या मेज से प्रत्येक पंक्ति खींच और सिर्फ लोगों को मैं जरूरत सुलझाने के लिए मेरी पुनरावर्ती क्रिया का उपयोग करें, लेकिन यह स्पष्ट रूप से अक्षम है क्योंकि मुझे केवल 10 पंक्तियों की आवश्यकता हो सकती है, लेकिन मैं 10,000 रिकॉर्ड खींचता हूं। पुनरावर्ती क्रिया के उत्पादन में सिर्फ इस तरह एक पेड़ बना देगा:

item 1 
    item 2 
    item 3 
     item 4 
     item 76 
     item 46 
      item 25 

सभी मुझे पता है कि मैं आइटम 1. आइटम 5 पर शुरू कर रहा हूँ 11 के एक माता पिता हो सकता है, उन्हें अनुक्रमिक जाना नहीं है। मैं पेड़ में सभी बाल शाखाएं प्राप्त करना चाहता हूं। मैं mysql में यह क्वेरी कैसे कर सकता हूं?

उत्तर

35

24 अक्टूबर, 2011 को, किसी ने question in the DBA StackExchange about tree traversal in MySQL पोस्ट किया। MySQL के लिए SQL इसका समर्थन नहीं कर सकता है।

मैं my answer to that question में तीन (3) संग्रहित प्रक्रियाएं (GetParentIDByID, GetAncestry और GetFamilyTree) ऊपर लिखा था। आशा है कि यह जानकारी आपको जो भी ढूंढ रही है उसे बनाने में मदद करेगी।

+0

उत्कृष्ट प्रक्रिया। लेकिन फिर 'चयन आईडी, GetFamilyTree (आईडी) pctable से; 'एक त्रुटि फेंकता है: _ERROR 1292 (22007): गलत डबल मूल्य काट दिया:' 4,5'_। मैंने इसे डीबग करने की कोशिश की, लेकिन व्यर्थ में। क्या आपको कोई विचार होगा! धन्यवाद – idok

7

AFAIK, यह MySQL के साथ ऐसा करने के लिए तुच्छ नहीं है।

http://explainextended.com/2009/03/17/hierarchical-queries-in-mysql/

+0

हां मुझे पता था कि यह एक बुनियादी सवाल नहीं था। : पी लेखों के लिए धन्यवाद। मैं निश्चित रूप से इसे देख लूंगा। – phpmeh

15

Bill Karwin MySQL में एक स्लाइड शो के बारे में heirarchical data पोस्ट की है:

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

  • संलग्नता सूची
  • पथ गणन
  • नेस्टेड सेट
  • बंद टेबल

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

यह कहकर कि, यदि आप अपना डिज़ाइन नहीं बदल सकते हैं या आप आसन्नता सूची के साथ रहना चाहते हैं तो मुझे डिडिएर से सहमत होना होगा कि आपको Quassnoi के आलेख "Hierarchical queries in MySQL" पर एक नज़र डालना चाहिए। यह एक बहुत स्पष्ट लेख है और बताता है कि क्वेरी को कुशलता से कैसे लिखना है।

+2

ग्रेट संसाधन। मैंने इसे इस तरह की जानकारी प्राप्त करने के लिए बाउंटी के लिए रखा है। धन्यवाद! – phpmeh

संबंधित मुद्दे