2014-04-12 22 views
7

Làm thế nào tôi sẽ đi về populating cột chiều sâu/chiều dài của một cột đóng cửa khi chèn một nút mới vào cây?Độ sâu trong MYSQL và cây bảng đóng cửa

Giá trị trong tổ tiên và hậu duệ là các ID từ một bảng khác đại diện cho các trang được sắp xếp trong cấu trúc cây.

Đóng Bảng:

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

này sẽ chèn tổ tiên và con cháu đúng nhưng tôi không chắc chắn làm thế nào để cư cột sâu Insert Query:

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}'; 

cách tốt nhất để là gì đi về điều này? Cảm ơn nhiều!

Trả lời

10

Thêm chiều sâu + 1 vào SELECT đầu tiên.

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

Truy vấn đó không hoạt động. – Guy

+0

Tôi quên đặt cột chiều sâu vào phần INSERT. Đã cập nhật. – tazer84

+0

Đã tính cho điều đó. Không hoạt động. – Guy

Các vấn đề liên quan