2014-04-12 4 views
7

पेड़ पर नया नोड डालने पर मैं बंद करने की तालिका की गहराई/लंबाई कॉलम को पॉपुल करने के बारे में कैसे जाउंगा?MYSQL और क्लोजर टेबल पेड़ में गहराई

पूर्वजों और वंशजों में मूल्य एक अन्य तालिका से आईडी हैं जो पेड़ संरचना में व्यवस्थित पृष्ठों का प्रतिनिधित्व करते हैं।

बंद तालिका:

ancestor descendant  depth 
1    1   0 
1    2   1 
1    3   1 
1    4   1 
2    2   0 
3    3   0 
4    4   0 

यह ठीक से पूर्वज और वंश से जोड़ दिया जाएगा लेकिन मुझे यकीन है कि गहराई स्तंभ सम्मिलित क्वेरी को भरने के लिए कैसे नहीं कर रहा हूँ:

INSERT INTO closure_tree_path (ancestor, descendant) 
SELECT ancestor, '{$node_id}' FROM closure_tree_path 
WHERE descendant = '{$parent_id}' 
UNION ALL SELECT '{$node_id}', '{$node_id}'; 

क्या करने के लिए सबसे अच्छा तरीका है इस बारे में जाओ? बहुत बहुत धन्यवाद!

उत्तर

10

पहले चयन में गहराई + 1 जोड़ें।

INSERT INTO closure_tree_path (ancestor, descendant, depth) 
SELECT ancestor, '{$node_id}', depth+1 FROM closure_tree_path 
WHERE descendant = '{$parent_id}' 
UNION ALL SELECT '{$node_id}', '{$node_id}', 0; 
+0

वह क्वेरी काम नहीं करती है। – Guy

+0

मैं गहराई कॉलम को INSERT भाग में डालना भूल गया। अपडेट किया गया। – tazer84

+0

इसके लिए पहले से ही जिम्मेदार है। काम नहीं करता – Guy

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