Comment obtenir tous les enfants d'un nœud dans l'arborescence ? Requête SQL?
table utilisateur
colonnes -
(l'identifiant ,le nom, managerId)
lignes -
(1,nilesh,0)
(2,nikhil,1)
(3,nitin ,2)
(4,Ruchi,2)
si je donne l'id de l'utilisateur qu'il doit la liste de tous les rapports de peuple à lui .
si je donne userId = 2, il doit retourner 3,4.
Est cette requête correcte
SELECT ad3.userId
FROM user au , user au2 , user au3
WHERE
ad.managerId = ad2.managerId AND
ad3.managerId = ad2.userId AND
ad.userId=2
Est-il efficace façon de gérer la structure de l'arbre dans la DB ?
Comment parler à droite et à gauche de la feuille ?
Quel type de base de données utilisez-vous?
Si vous êtes à la recherche d'autres façons de mettre en œuvre des hiérarchies dans une base de données relationnelle, vous pouvez avoir un coup d'oeil à cette présentation. slideshare.net/billkarwin/models-for-hierarchical-data
Très important de savoir que le moteur de base de données. Ce que vous voulez, c'est la "AVEC la" clause de mais ses pas universellement pris en charge.
"AVEC la" clause est appelée "expression de table commune récursive" et est pris en charge par PostgreSQL, Firebird, Oracle, DB2, SQL Server, Sybase et H2
Si vous êtes à la recherche d'autres façons de mettre en œuvre des hiérarchies dans une base de données relationnelle, vous pouvez avoir un coup d'oeil à cette présentation. slideshare.net/billkarwin/models-for-hierarchical-data
Très important de savoir que le moteur de base de données. Ce que vous voulez, c'est la "AVEC la" clause de mais ses pas universellement pris en charge.
"AVEC la" clause est appelée "expression de table commune récursive" et est pris en charge par PostgreSQL, Firebird, Oracle, DB2, SQL Server, Sybase et H2
OriginalL'auteur Neel Salpe | 2011-06-08
Vous devez vous connecter pour publier un commentaire.
À mon avis, le problème avec la liste d'adjacence modèle est qu'il devient difficile de traiter dans SQL surtout quand vous ne savez pas comment profondément imbriqués votre arborescence.
La 'gauche et à droite de la feuille manière" dont vous parlez est probablement l'ensemble imbriqué modèle et vous permet de stocker des choses comme ça
Alors vous pouvez trouver toutes les de toutes les subordonnés simplement
Je pense qu'il est beaucoup plus facile de traiter avec de l'interrogation, mais est plus difficile à faire pour l'arbre de modifications. Si vos données ne change pas beaucoup alors je pense que c'est une bien meilleure solution. (Tout le monde ne sera d'accord avec moi)
Il y a un Très bon tuto ici
David Steele mec, vous êtes grand ! Je m'attendais à cette réponse 🙂
Bon point, je n'ai besoin de regarder pour ceux-ci. Cependant, je pense toujours que si les données ne changent pas beaucoup NS est souvent la voie à suivre que les requêtes pour la lecture des données sont bien plus faciles à écrire et à comprendre.
Grâce Nilesh. Content que vous l'aimez.
Selon la base de données que vous utilisez, la liste d'adjacence modale peut être beaucoup plus rapide. Voir explainextended.com/2009/09/24/....
OriginalL'auteur David Steele
J'utilise un champ de texte à traiter avec des arbres en SQL. Il est plus facile que d'utiliser gauche/droite des valeurs.
Permet de prendre l'exemple de la base de l'article:
Il en résulterait un tableau comme ceci:
Trouvez tous les ordinateurs portables, vous utilisez simplement la Lignée de portables:
Contre:
Suggestion:
Je usally ajouter une autre colonne où j'ai mis le chemin sous la forme de texte (par exemple
'electronics/televisions/tube'
)a Pas fiable? Exactement ce n'est pas fiable? b) je ne dis pas que c'est une solution générique de travail pour tous les scénarios. À quelle profondeur peut votre employé arbre à obtenir? Ce n'est pas un problème. c) je vais avoir un moment difficile de voir comment il peut nuire à la performance dans votre cas. Sonne comme l'optimisation prématurée.
mec, vous exécutez la requête dans SQL avec une wild-card et à comparer des nombres .Requête pour la wild card de la prendra plus de temps .Donc plus de temps de récupération pour tous les enfants .Première fois que j'avais pris approche comme vous, mais ce n'est pas tellement efficace .
Je ne dis pas que votre approche est mal, je dis que ce n'est pas tellement efficace .;)
solution étonnante je sais de performance, mais il n'y a tout simplement pas de meilleure façon pour moi depuis que j'ai traiter avec les table & agit très rapidement sur des milliers de lignes et utiliser entity framwork
OriginalL'auteur jgauffin
Quelque chose comme ceci (ANSI SQL):
Mais seulement si l'arbre ne change pas très souvent.
a_horse_with_no_name est correct, mais si c'est vraiment pour les gestionnaires et le personnel, alors il est inlikely de changer plus d'une fois par jour.
Steele: absolument. Mais il est toujours bon de connaître toutes les options 😉
vous êtes correct .Ce modèle est bon quand il est fréquent de récupération de noeuds que la mise à jour de nœud 🙂
OriginalL'auteur a_horse_with_no_name
Est-ce que vous souhaitez?
aucun homme il est la structure de l'arbre ici, je donne ID parent, alors que je devrais obtenir l'Id de tous les directs ou indirects nœuds .
si vous donnez userid = 1 faut-il renvoyer les 2, 3 ,4 ou 2 ?
cette requête est parfait pour cela))) si vous avez besoin seulement de 2 userid = 1 )))
si vous avez besoin de construire un arbre avec tous les noeuds et des feuilles de la meilleure manière est de sélectionner toutes les lignes de commande par parent_id et de le construire par le biais de votre prog lang... mais de toute façon si la table est énorme il l'habitude de travailler très vite, parce qu'il est impossible de cacher un éléphant dans la boîte d'allumettes)))
OriginalL'auteur Dmitri Gudkov