2014-04-12 22 views
7

W jaki sposób powinienem wypełniać kolumnę głębokości/długości tabeli zamknięcia podczas wstawiania nowego węzła do drzewa?Głębokość w drzewach tabel MYSQL i tabelach zamknięć

Wartości w przodku i potomku to identyfikatory z innej tabeli reprezentującej strony, które mają być ułożone w strukturę drzewa.

Zamknięcie Tabela:

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

To będzie wstawić przodka i potomków poprawnie, ale nie jestem pewien, jak wypełnić kolumnę głębokości Insert zapytanie:

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

Jaki jest najlepszy sposób, aby o tym? Wielkie dzięki!

Odpowiedz

10

Dodaj głębokość + 1 do pierwszego 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

To zapytanie nie działa. – Guy

+0

Zapomniałem umieścić kolumnę głębokości w części WSTAW. Zaktualizowano. – tazer84

+0

Już to uwzględniono. Nie działa. – Guy