Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie kann ich die übergeordnete ID von Zeilen in dieser MySQL-Tabelle rekursiv abrufen?

Dies Website hat einen wirklich schönen Überblick über die verschiedenen Methoden zum Speichern hierarchischer Daten in mysql und PHP. Um Ihre Frage zu beantworten, ist der einfachste Weg, PHP und Rekursion zu verwenden. Es gibt andere Methoden, die Sie verwenden könnten, wie z. B. die modified preorder transversal , die nicht mehrere Datenbankabfragen erfordern. Diese Methode kann jedoch komplexer zu implementieren sein, wenn es um viele Einfügungen und Aktualisierungen geht.

Eine weitere wirklich coole Methode und mein persönlicher Favorit ist die sogenannte "Closure Table" / "Adjacency Relation", die in Was ist der effizienteste/eleganteste Weg, eine flache Tabelle in einen Baum zu zerlegen?

In Bezug auf Ihren Kommentar müssen Sie im Grunde eine Schleife oder eine rekursive Funktion erstellen, die den Elternteil von Chicago auswählt, dann den Elternteil des Elternteils und so weiter.

$stack = array();
$parent = 3;
while($parent != 0){
    $data = (put your mysql to get the row with parentID = $parent)
    $parent = data['parentID'];
    $stack[] = $data;
}

$stack = array_reverse($stack);

Der Stack enthält dann die Eltern von Chicago (d. h. Ort, USA)