J'ai des données hiérarchisées ordonnées sauvegardées à l'aide de l'algorithme modifié de traversée d'arbre de précommande.Traversée de l'arborescence de précommande modifiée: Sélection des nœuds 1 niveau de profondeur
est ici le contenu de tables:
id lft rgt name
1 1 10 topnode
2 2 3 level1
3 4 7 level1
4 5 6 level2
5 8 9 level1
Visualisé:
Ce que je veux est de sélectionner seulement les childNodes d'un certain noeud (donc pas les childNodes des childNodes). Disons "topnode". J'essaie de résoudre une requête, mais je n'arrive pas à la comprendre.
La recherche sur Internet m'amène un peu de temps, par exemple: je peux calculer la profondeur de chaque nœud, mais je n'arrive pas à le sélectionner.
Cette requête
SELECT node.*, (COUNT(parent.id) - 1) AS depth
FROM tree AS node
CROSS JOIN tree AS parent
WHERE (node.lft BETWEEN parent.lft AND parent.rgt)
GROUP BY node.id
ORDER BY node.lft
montre la profondeur de chaque noeud:
id lft rgt name depth
1 1 10 topnode 0
2 2 3 level1 1
3 4 7 level1 1
4 5 6 level2 2
5 8 9 level1 1
C'est super, mais je ne peux pas utiliser la profondeur de la colonne comme condition!
+1 parce que cela fonctionne, mais il est vraiment lent avec mon arbre-noeuds (35000 8 secondes). Je ne peux pas l'utiliser :( – Ivan