2014-04-12 5 views
7

Wie gehe ich vor, um die Tiefe/Länge-Spalte einer Schließungstabelle zu füllen, wenn ein neuer Knoten in den Baum eingefügt wird?Tiefe in MYSQL- und Closure-Tabellenbäumen

Die Werte in Vorfahren und Nachkommen sind IDs aus einer anderen Tabelle, die Seiten darstellen, die in einer Baumstruktur angeordnet werden sollen.

Closure Tabelle:

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

Dies wird die Vorfahren und Nachkommen richtig einsetzen, aber ich bin nicht sicher, wie die Tiefe Spalte füllen einfügen Abfrage:

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

Was ist der beste Weg ist, um gehst du darüber? Vielen Dank!

Antwort

10

Add Tiefe + 1 zum ersten 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

Diese Abfrage funktioniert nicht. – Guy

+0

Ich habe vergessen, die Tiefe Spalte in den INSERT-Teil zu setzen. Aktualisiert. – tazer84

+0

Bereits berücksichtigt. Funktioniert nicht. – Guy