MySQL SÉLECTIONNEZ Arbre Parent Id
Comment puis-je trier les enregistrements d'une instruction SELECT afin qu'ils représentent valide d'un arbre?
Toutes mes tentatives d'afficher les sous-nœuds imbriqués sous faux nœuds parents. Quel est le moyen le plus fiable pour atteindre cette commande?
Données
ID Parent ID Title
--------------------------------------------
0 NULL Root
1 0 Node A
2 0 Node B
3 1 Sub-Node C
4 1 Sub-Node D
5 3 Sub-Node E
Sortie
ID Parent ID Title
--------------------------------------------
0 NULL Root
1 0 Node A
3 1 Sub-Node C
5 3 Sub-Node E
4 1 Sub-Node D
2 0 Node B
La Visualisation Des Données
Root
Node A
Sub-Node C
Sub-Node E
Sub-Node D
Node B
Alors que les exemples fournis ci-dessous montrent quelques vraiment cool requêtes, je ne pense pas que c'est la couche de données de travail à fournir à la visualisation. Vous pouvez le faire plus facile (et beaucoup plus attrayant visuellement) avec PHP.
Je suis d'accord avec vous. J'espérais qu'il y aurait un rendement moyen efficace pour récupérer les résultats avec une simple requête, mais il ne regarde pas comme il va être très facile de cette façon. La seule solution qui vient à l'esprit est de trier avec PHP dans une série de temporaire de tableaux. Je n'ai besoin que d'un tableau plat, mais qui est triée par contiguïté.
regardez cette réponse pour le même cas: stackoverflow.com/a/33699713/5559741
Je suis d'accord avec vous. J'espérais qu'il y aurait un rendement moyen efficace pour récupérer les résultats avec une simple requête, mais il ne regarde pas comme il va être très facile de cette façon. La seule solution qui vient à l'esprit est de trier avec PHP dans une série de temporaire de tableaux. Je n'ai besoin que d'un tableau plat, mais qui est triée par contiguïté.
regardez cette réponse pour le même cas: stackoverflow.com/a/33699713/5559741
OriginalL'auteur Lea Hayes | 2011-04-16
Vous devez vous connecter pour publier un commentaire.
Vous pouvez imbriquer des Ensembles. Découvrez cet article:
La gestion Hiérarchique des Données dans MySQL
L'auteur décrit quelques méthodes différentes pour construire des hiérarchies dans SQL, complète avec des exemples de requêtes. C'est une très bonne lecture sur ce sujet!
Je sais que c'est une vieille question, mais seulement pour l'avenir, référence: Niché Jeux sont bons pour arbre-structures qui sont en train de lire la plupart du temps, mais rarement changé (INSERT, UPDATE, DELETE) parce que les options de rédaction dans les ensembles sont extrêmement coûteux: robsite.net/...
Merci, Broco! Je suis d'accord un peu avec cette solution. N'hésitez pas à poster votre propre réponse. C'est en substance une vue matérialisée!
OriginalL'auteur Emil Vikström
Suivant les conseils de @Blindy j'ai mis en œuvre ce genre avec PHP. Voici les deux fonctions qui semblent résoudre ce problème assez facilement.
Je serais intéressé d'entendre si il y a une approche plus simple, mais cela ne semble pas fonctionner.
Si je me souviens, cela signifie que vous devez changer la façon dont vous appelez
_sort_helper
. Au lieu d'essayer en utilisant$this->_sort_helper($input, $output, $item->id);
et$this->_sort_helper($items, $tree, null);
. Laissez-moi savoir si cela aide, et je vais mettre à jour ma réponse en conséquence 🙂OriginalL'auteur Lea Hayes
MySQL n'a pas de support pour les requêtes récursives
Vous aurez besoin de se joindre à la table autant de fois que le niveau hiérarchique est, mais il est encore assez laid pour obtenir une ligne pour chaque niveau de la hiérarchie de cette façon.
Voir ces messages pour quelques idées et exemples:
Catégorie de la Hiérarchie (PHP/MySQL)
comment peut-on écrire de requête mysql où id parent ont un id d'enfant et la prochaine fois que l'enfant est un id id parent, comment puis-je faire?
OriginalL'auteur a_horse_with_no_name
Je viens de finir de cette fonction récursive, et pensé que c'était une manière élégante sur le problème. Voici ce que j'ai fait une fois j'ai fait une sélection de base de requête mysql:
OriginalL'auteur ElizaWy
Voici une autre façon de faire de votre fonction PHP.
OriginalL'auteur Jared Eckersley