J'ai un comments
tableau, qui peut être simplifié comme suit:
comments
=======
id
user_id
text
parent_id
où parent_id
est nullable, mais peut être une clé pour son commentaire parent.
Maintenant, comment puis-je select
tous les descendants d'un commentaire spécifique?
Les commentaires peuvent être de plusieurs niveaux plus bas ...
la source
Cette conception de table est un "arborescence naïve" antipattern SQL tel que décrit par Bill Karwin (à partir de la diapositive 48 dans sa présentation SQL Antipatterns Strike Back ). Le problème avec cette conception est précisément la difficulté d'obtenir tous les descendants (ou parents) d'un nœud. Puisque vous utilisez MySQL, vous ne pouvez pas utiliser d'expressions de table communes (l'instruction WITH et son modificateur RECURSIVE) présentes dans d'autres SGBDR.
Il vous reste:
créer des requêtes d'auto-jointure avec une limite de profondeur. Pour une profondeur = 5, vous pouvez utiliser quelque chose comme:
utiliser un SGBDR qui prend en charge WITH RECURSIVE (bien que ce ne soit probablement pas une option pour la plupart des gens)
la source
MySQL ne prend pas en charge les requêtes récursives telles que celle dont vous avez besoin.
Ce que j'ai fait il y a quelque temps, j'ai écrit des procédures stockées qui fournissent le modèle pour le faire.
Plutôt que de réinventer la roue, je vais vous donner les liens vers mes précédents articles sur ce sujet:
Oct 24, 2011
: Trouver le plus haut niveau d'un champ hiérarchique: avec vs sans CTEDec 10, 2012
: MySQL : Requête arborescenteApr 12, 2013
: Requête récursive dans mysqlEn bref, les procédures stockées que j'ai faites font la pré-commande de la traversée de l'arbre en utilisant le traitement de la file
GetParentIDByID
GetAncestry
GetFamilyTree
Parent à tous les enfants (comme la procédure stockée GetFamilyTree)
parent_id
dans une file d'attenteparent_id
comme courantid
valeurs qui ont le courantparent_id
STEP02
De l'enfant à tous les parents (comme la procédure stockée GetAncestry)
id
dans une file d'attenteid
comme courantparent_id
valeur du courantid
STEP02
Veuillez consulter les procédures stockées dans mes autres articles pour voir la mise en œuvre.
Essaie !!!
la source
violon
la source