MySQL Imbriquée Jeux - Comment trouver le parent du nœud?
- Je avoir votre course de l'usine de sous ensemble de la hiérarchie du type d'installation avec les colonnes suivantes:
nom de la table:
myset
colonnes:
id, name, lft, rgt
Personne ne sait une requête pour déterminer la parent d'un nœud?
J'ai lu quelques endroits que c'est pratique d'avoir une parent_id colonne de votre tableau de garder une trace de cela, mais il semble redondant et il semble que cela pourrait être synchronisé avec l'ensemble imbriqué si une requête a été mal exécutée lors de l'ajout/suppression/déplacement de quoi que ce soit dans le jeu.
OriginalL'auteur Jake Wilson | 2009-10-21
Vous devez vous connecter pour publier un commentaire.
Regarder cette question. Il est semblable à la vôtre. J'ai posté il y a une requête, vous pouvez avoir besoin.
Je l'espère, est ce que vous avez besoin.
Pour le tableau suivant:
il produit de la sortie:
ORDER BY t2.rgt-t1.rgt
retournera une erreur dans sqlite?SQLSTATE[HY000]: General error: 1 no such column: t1.rgt
... ça fonctionne quand j'enlève t1.rgt de commande en sorte qu'il semble être un problème avec l'ordre par...OriginalL'auteur Lukasz Lysik
HAUT est un MSSQL commande, LIMITE d'utilisation pour MySQL:
Devrait faire l'affaire ..
OriginalL'auteur forch
juste pour ajouter à ces réponses qui m'a beaucoup aidée,
j'ai besoin de trouver l'immédiat parent d'un nœud, ainsi que le très haut niveau de parent d'un nœud de la chaîne, dans certains cas,
j'ai utilisé comme base pour obtenir les éléments de l'enfant à parent afin
il est alors question d'ajouter de la
LIMIT 1,1
à ne capturer que la deuxième ligne qui serait le parent immédiatil convient également de noter que, avec la requête ci-dessus si le nœud lui-même est le très haut niveau de la société mère, il n'aurait PAS un parent immédiat, donc, avec la
LIMIT 1,1
il retourne un jeu de résultats vided'obtenir de très haut niveau parent j'ai inversé la clause order by, inclus un chèque si le nœud lui-même est la société mère,et limité le résultat de la première ligne
dans la dernière requête que j'ai utilisé
>= <=
opérateurs de sorte que la sélection de la gamme englobe le nœud enfant si il arrive aussi d'être les parents de niveau supérieurOriginalL'auteur vurentjie
J'ai eu un problème avec Lucasz de la requête. Ma version de mysql n'a pas compris la commande TOP. J'ai dû utiliser la LIMITE de la place. Voici le code révisé.
Évidemment, changer les choses dans le [] pour répondre à vos besoins. Aussi enlever les [ ]. Cette requête ne retourne UNE seule ligne. Comme si...
OriginalL'auteur mrbinky3000
Vous pouvez utiliser un max plutôt que l'ordre ou la limite et vous pourriez avoir besoin d'un autre mot-clé afin de limiter les résultats à une seule ligne en fonction de votre base de données. Entre plutôt que < et > si votre base de données renvoie le ensemble exclusif, MySQL ne fonctionne pas.
OriginalL'auteur Eelco
OriginalL'auteur uksioo
Tous les ancêtres sont retournés par
Ainsi, le parent direct est l'ancêtre de la plus petite différence entre lft et rgt.
OriginalL'auteur dnagirl
Le code de spankmaster79 n'était pas complètement faux. J'ai modifié son code et ça a fonctionné.
OriginalL'auteur jackson