So finden Sie alle IDs der Kinder rekursiv?
Ich würde gerne alle IDs von Kindern in einem Baum mit nur MySQL.
Ich habe eine Tabelle wie diese:
ID parent_id name
1 0 cat1
2 1 subcat1
3 2 sub-subcat1
4 2 sub-subcat2
5 0 cat2
Nun versuche ich, alle Kind-IDs für cat1 (2,3,4) rekursiv. Gibt es eine Möglichkeit, wie das zu erreichen?
InformationsquelleAutor der Frage | 2009-06-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es zwei grundlegende Methoden, dies zu tun: angrenzens Listen und verschachtelte Listen. Werfen Sie einen Blick auf Managing Hierarchical Data in MySQL.
Was Sie haben, ist eine Nähe-Liste. Nein gibt es nicht eine Möglichkeit, rekursiv greifen alle Nachkommen mit einer einzigen SQL-Anweisung. Wenn möglich, greifen Sie alle, und ordnen Sie Sie alle in code.
Nested sets machen können was Sie wollen, aber ich Neige dazu, es zu vermeiden, weil die Kosten für das einfügen eines Datensatzes ist hoch, und es ist fehleranfällig.
InformationsquelleAutor der Antwort cletus
Hier ist eine einfache Abfrage, MySql-Lösung:
Nur Ersatz
<id>
mit dem übergeordneten element istID
.Dieser wird in einen string zurückzugeben, der die
ID
s für alle Nachfahren des Elements mitID
=<id>
getrennt durch,
. Wenn du lieber mehrere Zeilen zurückgegeben, die mit einem Nachkommen auf jede Zeile, die Sie verwenden können, so etwas wie dieses:Einschließlich der Wurzel/Stamm element
Den OP gebeten, für die Kinder ein element, das weiter oben geantwortet. In einigen Fällen kann es nützlich sein, die root/parent-element in der Ergebnismenge. Hier sind meine Lösungsvorschläge:
Komma-getrennter string von ids:
Mehrere Zeilen:
InformationsquelleAutor der Antwort Magnar Myrtveit
Könnten Sie wahrscheinlich tun es mit einer gespeicherten Prozedur, wenn das eine option für Sie.
Anders kann man es nicht mit einer einzigen sql-Anweisung.
Idealerweise sollten Sie die rekursiven Aufrufe zu Fuss den Baum aus Ihrem Programm
InformationsquelleAutor der Antwort jitter
InformationsquelleAutor der Antwort Pankaj katiyar
Sehen, dass die Antwort ist im Grunde genommen nicht oder zumindest nicht sehr einfach mit einem einzigen MYSQL-Anweisung, poste ich meine php/mysql-code der Hierarchie-Liste..
Dann rufen Sie Sie durch
$cat_array = createCategorySubArray();
Brauche ich das, um herauszufinden, welche Aktionen basierend auf Produkt-Kategorien angewendet werden, um die sub-Kategorien.
InformationsquelleAutor der Antwort Iannazzi
Ihre Frage scheint ein wenig ungenau. Warum tun Sie Sie haben wollen, und was meinst du mit, "in einem Baum" ?
Die Tabelle, die Sie bekommen haben IST (das relationale Darstellung) der Baum.
Wenn Sie wollen, dass Sie "in einer Tabelle" mit den Zeilen, halten Sie die Paare (ID 4 , ParentID, 0), dann müssen Sie Ihre SQL-engine version von rekursiven SQL-dies zu tun, wenn die engine es unterstützt.
Ich würde es nicht wissen über die MySQL-spezifisch, aber mein Verständnis ist, dass Sie nach der Planung zu implementieren rekursive SQL mit dem gleichen syntax wie Oracle, D. H. mit VERBINDUNG.
Wenn du mal in deinem Handbuch Inhaltsverzeichnis nach Stichworten wie "rekursive Abfragen" oder "VERBINDEN", ich denke, Sie sollten in der Lage sein, die Antwort zu finden.
(Sorry für nicht in der Lage zu bieten eine ready-to-consume Antwort.)
InformationsquelleAutor der Antwort