Abrufen verknüpfter Listendaten in MySQL
In einer MySQL-Datenbank stoßen Sie auf eine Tabellenstruktur wie die unten angegebene:
table id INT NOT NULL PRIMARY KEY data ... next_id INT NULL
Die Aufgabe besteht darin, Daten entsprechend der Reihenfolge der verknüpften Liste abzurufen. Betrachten Sie die folgenden Daten als Beispiel:
id | next_id |
---|---|
1 | 2 |
2 | 4 |
3 | 9 |
4 | 3 |
9 | NULL |
Das Ergebnis sollte in dieser Reihenfolge vorliegen: 1, 2, 4, 3, 9.
Im Gegensatz zu bestimmten Datenbanken wie Oracle und Microsoft SQL Server, MySQL unterstützt keine rekursiven Abfragen. Dieses Problem ähnelt der Darstellung eines Baums in einer SQL-Datenbank, insbesondere eines dünnen, länglichen Baums.
Es gibt verschiedene Lösungen für die Verwaltung dieser Art von Datenstruktur:
Um die Abfragen einzuschränken „Tiefe“ verwenden Sie die folgende Technik:
<code class="sql">SELECT * FROM mytable t1 LEFT JOIN mytable t2 ON (t1.next_id = t2.id) LEFT JOIN mytable t3 ON (t2.next_id = t3.id) LEFT JOIN mytable t4 ON (t3.next_id = t4.id) LEFT JOIN mytable t5 ON (t4.next_id = t5.id) LEFT JOIN mytable t6 ON (t5.next_id = t6.id) LEFT JOIN mytable t7 ON (t6.next_id = t7.id) LEFT JOIN mytable t8 ON (t7.next_id = t8.id) LEFT JOIN mytable t9 ON (t8.next_id = t9.id) LEFT JOIN mytable t10 ON (t9.next_id = t10.id);</code>
Trotz ihrer langsamen Leistung erzeugt diese Abfrage eine einzelne Zeile für jede verknüpfte Liste.
Das obige ist der detaillierte Inhalt vonWie rufe ich Daten aus einer verknüpften Liste in MySQL ohne rekursive Abfragen ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!