2014-04-12 28 views
7

當向樹插入新節點時,我將如何填充閉合表的深度/長度列?MYSQL和閉合表樹的深度

祖先和後代中的值是來自另一個表的代表要在樹結構中排列的頁面的ID。

關閉表:

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

將depth + 1添加到第一個SELECT。

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