Profondità in mysql e alberi da tavolo chiusura
-
21-12-2019 - |
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!
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