Profondeur dans les arbres de la table MySQL et Fermeture
-
21-12-2019 - |
Question
Comment allez-y de remplir une colonne de profondeur / longueur de table de fermeture lors de l'insertion d'un nouveau noeud à l'arborescence?
Les valeurs dans l'ancêtre et les descendants sont des identifiants d'une autre table représentant des pages à disposition dans une structure d'arborescence.
Table de fermeture:
ancestor descendant depth
1 1 0
1 2 1
1 3 1
1 4 1
2 2 0
3 3 0
4 4 0
Cela insérera correctement l'ancêtre et les descendants, mais je ne sais pas comment remplir la colonne de profondeur. Insérer la requête:
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}';
Quel est le meilleur moyen d'y aller?Merci un tas!
La solution
Ajouter une profondeur + 1 à la première sélection.
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;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow