Heim  >  Artikel  >  Datenbank  >  Kann MySQL verknüpfte Listendaten ohne clientseitige Verarbeitung abrufen?

Kann MySQL verknüpfte Listendaten ohne clientseitige Verarbeitung abrufen?

Susan Sarandon
Susan SarandonOriginal
2024-11-04 08:38:30869Durchsuche

Can MySQL Retrieve Linked List Data Without Client-Side Processing?

Abrufen verknüpfter Listendaten aus der MySQL-Datenbank

Frage:

Gegeben sei eine MySQL-Datenbanktabelle mit der Struktur:

table
    id INT NOT NULL PRIMARY KEY
    data ..
    next_id INT NULL

Können Sie die Daten in der Reihenfolge der verknüpften Listen mithilfe einer Datenbankabfrage abrufen, ohne auf eine clientseitige Verarbeitung zurückgreifen zu müssen?

Antwort:

Leider unterstützt MySQL keine rekursiven Abfragen, die zum effizienten Abrufen verknüpfter Listendaten erforderlich sind. Dieses Problem ähnelt der Darstellung einer Baumstruktur in einer relationalen Datenbank.

Alternative Ansätze:

Alternative Methoden zum Speichern und Abrufen von Baumstrukturen finden Sie in den folgenden Fragen Daten aus einem relationalen Datenbanksystem:

  • "Was ist der effizienteste/eleganteste Weg, eine flache Tabelle in einen Baum zu analysieren?"
  • "Ist es möglich, ein rekursives SQL zu erstellen query ?"

Abfrage mit begrenzter Tiefe:

Wenn Sie die Tiefe des Abfrageergebnisses begrenzen möchten, können Sie den folgenden Ansatz verwenden, allerdings mit schlechte Leistung:

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);

Das Ergebnis wird für jede verknüpfte Liste in einer einzelnen Zeile zurückgegeben, aber die Abfrageleistung ist langsam.

Das obige ist der detaillierte Inhalt vonKann MySQL verknüpfte Listendaten ohne clientseitige Verarbeitung abrufen?. 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