juste ajouter à ces réponses qui m'a beaucoup aidé,
i nécessaires pour trouver le parent immédiat d'un nœud, ainsi que le parent de niveau très haut d'une chaîne de noeud dans certains cas,
i utilisé ce qui suit comme une base pour obtenir les éléments pour enfant à parent
SELECT parent.* FROM
nested_set node,
nested_set parent
WHERE (
node.set_left BETWEEN parent.set_left AND parent.set_right
)
AND node.set_id={CHILD_NODE_ID_HERE}
ORDER BY parent.set_right - parent.set_left
#LIMIT 1,1
il est alors une question d'ajouter le LIMIT 1,1
seulement capturer la deuxième ligne qui serait le parent immédiat
il convient également de noter que la requête ci-dessus si le nœud lui-même est le parent de niveau très haut, il n'y aurait pas d'parent immédiat, donc avec l'LIMIT 1,1
il doit retourner un jeu de résultats vide
pour obtenir le parent de niveau très haut i inversé l'ordre par article, inclus un chèque si le nœud lui-même est le parent supérieur, et limité le résultat à la première ligne
SELECT parent.* AS top_level_right FROM
nested_set node,
nested_set parent
WHERE (
node.set_left >= parent.set_left
AND node.set_left <= parent.set_right
)
AND node.set_id={CHILD_NODE_ID_HERE}
ORDER BY parent.set_left - parent.set_right
LIMIT 1
dans la dernière requête i utilisé >= <=
opérateurs afin que la plage sélectionnée englobe le noeud enfant s'il arrive aussi à être le parent de premier niveau
Savez-vous pourquoi 'ORDER BY t2.rgt-t1.rgt' retournera une erreur dans sqlite? 'SQLSTATE [HY000]: Erreur générale: 1 pas une telle colonne: t1.rgt' ... cela fonctionne quand je supprime t1.rgt de l'ordre par donc il semble être un problème avec ordre par ... – Stoner