J'essaie de gérer la récupération d'un nœud dans une table nested set model, non pas via l'ID unique, mais via le nom (une chaîne), et d'autres nœuds dans l'arbre sous des parents différents peuvent être appelés de la même manière.Sélection d'un nœud dans le modèle de jeu imbriqué via un nom non unique
En ce qui concerne maintenant j'utilisé un identifiant unique pour obtenir des noeuds dans les ensembles imbriqués:
SELECT
node.name, node.lft, node.rgt
FROM tbl AS parent, tbl AS node
WHERE node.lft BETWEEN parent.lft AND parent.rgt
AND node.id = '{$node_id}'
GROUP BY node.id
Essayant d'étendre cette méthode à une façon plus générale pour récupérer le nœud par son nom, je suis venu avec une requête contenant autant PRESENTANT clauses que la profondeur du nœud pour récupérer, vérifier le nom de noeud et sa profondeur:
SELECT
node.name, node.lft, node.rgt, COUNT(node.id) AS depth
FROM tbl AS parent, tbl AS node
WHERE node.lft BETWEEN parent.lft AND parent.rgt
GROUP BY node.id
HAVING
(node.name = 'myParentName' AND depth = 1)
OR
(node.name = 'myParent2Name' AND depth = 2)
OR
...
# and so on
Mais il est pas parfait: avoir deux nœuds avec le même nom et la même profondeur, mais au sein de différents parents, les deux sont récupérés, peu importe la hiérarchie y ils appartiennent à.
Exemple:
ARTICLES | +--PHP | +--the-origins | +--syntax +--JS +--history +--syntax
Dans ce cas, la requête ci-dessus serait de retour soit ARTICLES/PHP/syntaxe ou ARTICLES/JS/syntaxe: un noeud "syntaxe" avec la profondeur 3, en fait, est soit sous la Nœud PHP ou sous le nœud JS. Existe-t-il un moyen efficace de marcher pour résoudre ce problème?
Donc, vous entrez par exemple 'PHP' et 'syntaxe' et leurs profondeurs respectives, et vous voulez que leur piste vers le haut? Ou quelle est l'entrée et la sortie exactes que vous voulez si ce n'est pas le cas? – Wrikken
Oui Wrikken, j'essaie de faire exactement cela. Je prendrais la profondeur du chemin donné. –