डेटाबेस में ट्री स्ट्रक्चर्ड डेटा को संभालने के लिए मेरी फ़ारोवाइट ट्रिक एक कॉलम है FullID
तालिका में जटिल (शायद पुनरावर्ती) एसक्यूएल/संग्रहीत प्रक्रियाओं से बचने के लिए।
FullID id parent name
-----------------------------
1 1 null root1
2 2 null root2
2.3 3 2 home
2.3.4 4 3 child
2.3.4.5 5 4 sub_child
2.3.4.5.6 6 5 sub_sub_child
तो, रूट पेज आईडी खोजने के लिए, बस FullID
. का पहला भाग निकालें SQL या आपकी एप्लिकेशन भाषा के माध्यम से।
यदि SQL का उपयोग कर रहे हैं, तो आप रूट आईडी प्राप्त करने के लिए निम्न SQL का उपयोग कर सकते हैं।
-- MySQL dialect
select substring_index(FullID,'.',1) as RootID from table;
-- SQL Server dialect
select case charindex('.', FullID) when 0 then FullID else substring(FullID, 1, charindex('.', FullID)-1) end as RootID from table
नोड और उसके बच्चों को हटाने के लिए
DELETE table WHERE id=<CURRENT_NODE_ID> OR FullID LIKE '<CURREN_NODE_FULLID>.%'
नोड और उसके बच्चों को स्थानांतरित करने के लिए
-- change the parent of current node:
UPDATE table
SET parent=<NEW_PARENT_ID>
WHERE id=<CURRENT_NODE_ID>
-- update it's FullID and all children's FullID:
UPDATE table
SET FullID=REPLACE(FullID,<CURRENT_NODE_PARENT_FULLID>, <NEW_PARENT_FULLID>)
WHERE (id=<CURRENT_NODE_ID> OR FullID LIKE '<CURRENT_NODE_FULLID>.%')
नोट
यह ट्रिक केवल सीमित ट्री स्तर के मामलों या FullID
. पर लागू होती है यदि वृक्ष का स्तर बहुत गहरा है, तो लंबी सामग्री धारण नहीं कर सकता।