Domanda

Come vai a capire la colonna di profondità / lunghezza del tavolo di chiusura quando si inserisce un nuovo nodo all'albero?

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

Tabella di chiusura:

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 inserisce correttamente l'antenato e i discendenti ma non sono sicuro di come popolare la colonna di 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 farlo?Grazie un grappolo!

È stato utile?

Soluzione

Aggiungi profondità + 1 alla prima selezione.

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;
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top