2014-04-12 14 views
7

Come si va a completare la colonna di profondità/lunghezza della tabella di chiusura quando si inserisce un nuovo nodo nell'albero?Profondità negli alberi di tabelle MYSQL e di chiusura

I valori nell'antenato e discendente sono ID di un'altra tabella che rappresentano le pagine da disporre in una struttura ad albero.

Chiusura Tabella:

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

Questo inserirà l'antenato e discendenti correttamente, ma non sono sicuro come popolare la colonna profondità Inserisci 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}'; 

Qual è il modo migliore per andare su questo? Grazie mille!

risposta

10

Aggiungere profondità + 1 al primo SELEZIONA.

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

Quella query non funziona. – Guy

+0

Ho dimenticato di inserire la colonna di profondità nella parte INSERT. Aggiornato. – tazer84

+0

Già considerato per quello. Non funziona – Guy

Problemi correlati