L'obtention de données de hiérarchie de l'auto-référencement tables
Disons que vous avez le tableau suivant:
items(item_id, item_parent)
... et c'est un auto-référencement de table - item_parent
se réfère à item_id
.
Quelle requête SQL utiliseriez-vous pour SÉLECTIONNER tous les éléments dans le tableau, avec leur profondeur où la profondeur d'un élément est la somme de tous les parents et grands-parents de cet élément.
Si ce qui suit est le contenu de la table:
item_id item_parent
----------- -----------
1 0
2 0
3 2
4 2
5 3
... la requête doit récupérer l'ensemble des objets:
{"item_id":1,"profondeur":0}
{"item_id":2,"profondeur":0}
{"item_id":3,"profondeur":1}
{"item_id":4,"profondeur":1}
{"item_id":5,"profondeur":2}
P. S. je suis à la recherche d'une base de données MySQL approche prise en charge.
- Recherche pour "expression de table commune Récursive".
- La base de données, et la version? Requêtes récursives sont spécifiques au fournisseur, si la prise en charge à tous.
- C'est en supposant qu'il est à l'aide de MS SQL Server.
- Vrai, mais l'expression de table commune Récursive font partie de la norme SQL Server n'est pas le seul produit qui les prend en charge.
- Emmanuil: Si vous avez besoin de MySql réponses spécifiques, alors vous devriez avoir précisé que, quelque part.
- Je m'excuse à ce sujet. J'ai tort de supposer que la réponse pourrait s'appliquer à n'importe quel SGBD.
Vous devez vous connecter pour publier un commentaire.
Si la base de données SQL 2005 /2008 puis...
La manière la plus simple est d'employer une expression de table commune (Common Table Expression) qui est conçu de manière récursive.
La sortie est comme suit:
De ce que vous pouvez mettre en forme comme vous le souhaitez.
Il y a un bon article tech sur le site web de mysql sur hiérarchique des données dans MySql:
La gestion Hiérarchique des Données dans MySQL - vous pouvez trouver quelques solutions détaillées avec les pro et les inconvénients de là.
En particulier la partie sur "L'Ensemble Imbriqué Modèle" et "recherche de la Profondeur des Nœuds" devrait être d'intérêt pour vous.
Oracle est très pratique de la syntaxe pour l'extraction de données hiérarchiques comme ceci:
Cela commence avec les nœuds racines de vos arbres comme les éléments dont les item_parent n'existe pas dans le tableau item_id, et sélectionne tous les enfants de ces nœuds, ainsi que leur profondeur dans l'arbre.
MySQL
EDIT: supprimé les informations inutiles
J'ai besoin de trouver une solution pour la même tâche, trouvé quelques articles, mais n'a toujours pas choisir où aller...
http://explainextended.com/2009/07/20/hierarchical-data-in-mysql-parents-and-children-in-one-query/
Peut-être de ces liens peut vous aider. Si vous trouvez une bonne solution s'il vous plaît poster ici. je ne suis pas autorisé à poster plus de 1 lien - je ajouter un peu de prochains posts