Heim  >  Artikel  >  Datenbank  >  Wie rufe ich Daten aus einer verknüpften Liste in MySQL ohne rekursive Abfragen ab?

Wie rufe ich Daten aus einer verknüpften Liste in MySQL ohne rekursive Abfragen ab?

DDD
DDDOriginal
2024-11-01 02:31:02378Durchsuche

How to Retrieve Data from a Linked List in MySQL Without Recursive Queries?

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:

  • [Darstellung von Baumstrukturen in SQL Datenbanken](https://stackoverflow.com/questions/2321851/what-is-the-most-efficient-elegant-way-to-parse-a-flat-table-into-a-tr)
  • [Rekursive SQL-Abfragen](https://stackoverflow.com/questions/71469/is-it-possible-to-make-a-recursive-sql-query)

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn