Ich habe eine comments
Tabelle, die vereinfacht werden kann:
comments
=======
id
user_id
text
parent_id
where parent_id
ist nullwertfähig, kann jedoch ein Schlüssel für den übergeordneten Kommentar sein.
Wie kann ich nun select
alle Nachkommen eines bestimmten Kommentars?
Die Kommentare können mehrere Ebenen tiefer sein ...
quelle
Bei diesem Tabellendesign handelt es sich um ein SQL-Antipattern "Naive trees", wie es von Bill Karwin beschrieben wurde ( siehe Folie 48 in seiner Präsentation " SQL Antipatterns Strike Back" ). Das Problem bei diesem Entwurf ist insbesondere die Schwierigkeit, alle Nachkommen (oder Eltern) eines Knotens zu erhalten. Da Sie MySQL verwenden, können Sie keine allgemeinen Tabellenausdrücke (die WITH-Anweisung und deren RECURSIVE-Modifikator) verwenden, die in anderen RDBMS vorhanden sind.
Was Ihnen noch bleibt, ist:
Erstellen Sie Self-Join-Abfragen mit einem Tiefenlimit. Für Tiefe = 5 könnten Sie etwas in den Zeilen von verwenden:
Verwenden Sie ein RDBMS, das WITH RECURSIVE unterstützt (obwohl dies für die meisten Menschen höchstwahrscheinlich keine Option ist).
quelle
MySQL unterstützt keine rekursiven Abfragen wie die, die Sie benötigen.
Vor einiger Zeit habe ich gespeicherte Prozeduren geschrieben, die das Modell dafür darstellen.
Anstatt das Rad neu zu erfinden, gebe ich Ihnen die Links zu meinen früheren Beiträgen dazu:
Oct 24, 2011
: Finde die höchste Ebene eines hierarchischen Feldes: mit vs ohne CTEsDec 10, 2012
: MySQL: Baum-Hierarchische AbfrageApr 12, 2013
: Rekursive Abfrage in MySQLKurz gesagt, die gespeicherten Prozeduren, die ich erstellt habe, führen eine Vorbestellung der Baumdurchquerung mithilfe der Warteschlangenverarbeitung durch
GetParentIDByID
GetAncestry
GetFamilyTree
Eltern für alle Kinder (wie GetFamilyTree Stored Procedure)
parent_id
in einer Warteschlangeparent_id
als den Strom aus der Warteschlange nehmenid
Werte einreihen , die den Strom habenparent_id
STEP02
Child to all Parent (wie GetAncestry Stored Procedure)
id
in einer Warteschlangeid
als den Strom aus der Warteschlange nehmenparent_id
Wert des Stroms in eine Warteschlange einreihenid
STEP02
Bitte schauen Sie sich die gespeicherten Prozeduren in meinen anderen Posts an, um die Implementierung zu sehen.
Versuche es !!!
quelle
Geige
quelle