एलटीआरई
आप लगभग सही रास्ते पर हैं। आप डेटाबेस में पदानुक्रमित डेटा संग्रहीत करने की 'LTREE' प्रणाली पर लगभग ठोकर खा चुके हैं। आपको बस थोड़ा सा संशोधन करने की जरूरत है। बस इतना ही।
आपकी टेबल कुछ इस तरह दिख सकती है:
CREATE TABLE Table1
(`id` int, `parent_id` int, `name` varchar(13),
`path` char(10),
`money` int)
;
और आपका डेटा ऐसा दिखाई दे सकता है।
(1, 0, 'company 1', '1', 10),
(2, 1, 'child 1', '1.1', 10),
(3, 2, 'child 2', '1.1.1', 10),
(4, 1, 'child 3', '1.2', 10,),
(4, 1, 'company 2', '2', 10),
(4, 1, 'child 2.1', '2.1', 10)
पथ कॉलम यह पहचानने में मदद करता है कि कौन सी कंपनी किसी अन्य कंपनी की सहायक कंपनी है। ध्यान दें कि आपके पास वास्तव में allmoney
की आवश्यकता नहीं है कॉलम। यह गतिशील रूप से उत्पन्न होता है।
और आप पहली कंपनी के सभी पैसे कैसे ढूंढते हैं?
select sum(money) from Table1 where path >= '1' and path < '2'
ध्यान दें कि हमने जो संरचना बनाई है, उसमें चाइल्ड 1 चाइल्ड 2 का जनक है। तो हम बच्चे1 के लिए पूरा पैसा कैसे खोजते हैं?
select sum(money) from Table1 where path >= '1.1' and path < '1.2'
केवल एक प्रश्न है और कोई पुनरावर्तन नहीं है।
एमपीटीटी
पदानुक्रमित डेटा प्राप्त करने के लिए एक अन्य लोकप्रिय तरीका संशोधित पूर्व-आदेश ट्री ट्रैवर्सल का उपयोग करना है। Sitepoint पर एक उत्कृष्ट लेख रहा है। कई वर्षों के लिए जो बताता है कि यह बहुत सारे नमूना कोड के साथ कैसे किया जाता है।