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!

Était-ce utile?

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
scroll top