SQLite

2010-10-09 9 views
8

मैं PHP के साथ एक पदानुक्रमित सूची बनाने के लिए कोशिश कर रहा हूँ के साथ एक सूची पेड़ बनाना और इस तरह एक SQLite तालिका स्थापना:SQLite

| itemid | parentid | name | 
    ----------------------------------------- 
    | 1  | null  | Item1 | 
    | 2  | null  | Item2 | 
    | 3  | 1   | Item3 | 
    | 4  | 1   | Item4 | 
    | 5  | 2   | Item5 | 
    | 6  | 5   | Item6 | 

सूचियों और अव्यवस्थित सूची के साथ निर्माण किया जाएगा पेड़ के इस प्रकार के लिए अनुमति संरचना:

Item1 
    |_Item3 
    |_Item4 
Item2 
    |_Item5 
     |_Item6 

मैं इस निर्देशिका और फ्लैट सरणियों के साथ किया देखा है, लेकिन मैं इसे सही इस संरचना के साथ और गहराई सीमा के बिना काम करने के लिए नहीं कर पा रहे।

+0

क्या गलत हो रहा है? – Anon

उत्तर

13

आप SQL डेटाबेस में पदानुक्रमित डेटा संग्रहीत करने के लिए पाठ्यपुस्तक डिज़ाइन का उपयोग कर रहे हैं। इस डिजाइन को एडजेंसी सूची कहा जाता है, यानी पदानुक्रम में प्रत्येक नोड में parentid अपने तत्काल माता-पिता के लिए विदेशी कुंजी है।

इस डिज़ाइन के साथ, आप पेड़ के लिए मनमानी गहराई का वर्णन करने और समर्थन करने जैसे पेड़ उत्पन्न नहीं कर सकते हैं। आप इसे पहले से ही समझ चुके हैं।

अधिकांश अन्य SQL डेटाबेस (PostgreSQL, माइक्रोसॉफ्ट, ओरेकल, आईबीएम डीबी 2) इस समस्या को हल करने वाले पुनरावर्ती प्रश्नों का समर्थन करते हैं। लेकिन SQLite और MySQL अभी तक SQL की इस सुविधा का समर्थन नहीं करते हैं।

तो आपको पदानुक्रम को स्टोर करने के लिए एक और समाधान की आवश्यकता है। इसके लिए कई समाधान हैं। विवरण और उदाहरणों के लिए मेरी प्रस्तुति Models for Hierarchical Data with PHP and MySQL देखें।

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

+0

जानकारी के लिए धन्यवाद। वास्तव में मुझे क्या चाहिए। – syllabic