2010-07-18 11 views
9

मैं निम्न तालिका है:पुनरावर्ती स्वयं क्वेरी

myTable: 
+----+----------+ 
| id | parentID | 
+----+----------+ 
| 1 |  null | 
| 2 |  1 | 
| 3 |  1 | 
| 4 |  2 | 
| 5 |  4 | 
----------------- 

मैं वापस अनुरेखण वहाँ अब है जब तक कोई parentID सभी पंक्तियां प्राप्त करना चाहते हैं। तो ".... कहां आईडी = 5" मुझे देना होगा:

5, 4, 2, 1 
+4

नियमित बिल करविन ने हाइरिकल डेटा के कुछ अच्छे स्पष्टीकरण और विभिन्न समाधानों का उपयोग कैसे किया: http://www.slideshare.net/billkarwin/models-for-hierarchical-data – Wrikken

+0

MySQL में रिकर्सिव सीटीई नहीं है इसलिए मुझे लगता है यदि आपको मनमानी गहराई को संभालने की आवश्यकता है तो इसे कर्सर की आवश्यकता होगी। संरचना बदल रहा है http://dev.mysql.com/tech-resources/articles/hierarchical-data.html एक विकल्प? या हम कुछ अधिकतम गहराई मान सकते हैं? यह संबंधित प्रश्न भी देखें http://stackoverflow.com/questions/169817/is-it-possible-to-query-a-tree-structure-table-in-mysql-in-a-single-query-to-any –

+0

बिल करविन की स्लाइड वास्तव में अच्छी हैं। – iddqd

उत्तर

9

आप adjacency list model का उपयोग कर अपने श्रेणीबद्ध डेटा के आयोजन कर रहे हैं। तथ्य यह है कि इस तरह के रिकर्सिव ऑपरेशंस मुश्किल हैं वास्तव में इस मॉडल का एक बड़ा दोष है।

कुछ डीबीएमएस, जैसे SQL सर्वर 2005, पोस्टग्रेस 8.4 और ओरेकल 11 जी, का उपयोग WITH कीवर्ड के साथ रिकर्सिव क्वेरी का समर्थन करते हैं।

:

MySQL के लिए के रूप में, आप निम्न आलेख जो एक वैकल्पिक मॉडल (nested set model) का वर्णन करता है, जो पुनरावर्ती संचालन आसान (संभव) बना देता है बाहर की जाँच में रुचि हो सकती इसके अलावा, मैं उपरोक्त टिप्पणियों में Bill Karwin's presentation की ओर इशारा करते हुए भी सुझाव देता हूं। वर्णित बंद तालिका मॉडल नेस्टेड सेट के लिए एक बहुत ही वैध विकल्प है।

+0

ठीक है, लिंक और टिप्पणियों के लिए बहुत धन्यवाद, मुझे अब मिल गया है। चूंकि मैं पेड़ों को बहुत गहराई से नहीं मान रहा हूं और मुझे शायद ही कभी इसकी आवश्यकता है, मैंने बस दो स्वयं को शामिल करने का निर्णय लिया है, और अगर माता-पिता अभी भी पूर्ण नहीं है, तो मैं फिर से क्वेरी चलाता हूं। – iddqd

+0

@iddqd: हाँ, यह करने योग्य है। लेकिन जैसा कि आप देख रहे हैं, यह इस मॉडल की सीमा है। –

+0

बिल्कुल, thx। – iddqd

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