Heim > Datenbank > MySQL-Tutorial > Wie kann ich Nachkommen oder Vorfahren in einer MySQL-Baumstruktur effizient abfragen, ohne die Tiefe anzugeben?

Wie kann ich Nachkommen oder Vorfahren in einer MySQL-Baumstruktur effizient abfragen, ohne die Tiefe anzugeben?

Patricia Arquette
Freigeben: 2025-01-06 17:30:41
Original
776 Leute haben es durchsucht

How Can I Efficiently Query Descendants or Ancestors in a MySQL Tree Structure Without Specifying Depth?

Baumstrukturabfrage in MySQL: Tiefenunabhängige Durchquerung

Der Zugriff auf Baumstrukturdaten in MySQL erfordert häufig rekursive oder sequentielle Abfragen. Es ist jedoch möglich, mit einer einzigen Abfrage alle Nachkommen oder Vorfahren einer bestimmten Zeile in einer baumstrukturierten Tabelle abzurufen, ohne die Tiefenebene explizit anzugeben. Diese Technik wird als „Modified Preorder Tree Traversal“ bezeichnet.

Abfragemethodik

In einer Baumstrukturtabelle mit den Spalten „id“, „data“ und „parent_id“ kann eine modifizierte Preorder-Traversal-Abfrage durchgeführt werden wie folgt formuliert werden:

SELECT id, data, parent_id
FROM tree_table
WHERE id IN (
    SELECT id
    FROM tree_table
    WHERE ancestry LIKE '%given_id/%'
)
Nach dem Login kopieren

Hier stellt „give_id“ die ID der Zeile dar, für die Sie Nachkommen abrufen möchten oder Vorfahren.

Verwendung und Implementierung

Die Abfragezeichenfolge „ancestry LIKE ‚%given_id/%“ filtert nach Zeilen, die die angegebene ID als Teil ihrer Abstammung haben Weg. Dadurch wird sichergestellt, dass alle Nachkommen (zusammen mit der angegebenen Zeile) zurückgegeben werden. Um Vorfahren abzurufen, ersetzen Sie einfach „%given_id/%“ durch „%/given_id/%“.

Zum Beispiel in PHP mit MySQLi:

$stmt = $mysqli->prepare("SELECT id, data, parent_id FROM tree_table WHERE id IN (SELECT id FROM tree_table WHERE ancestry LIKE '%?/%')");
Nach dem Login kopieren

Zusätzliche Informationen

Das bereitgestellte PHP-Beispiel von Sitepoint (in der Antwort erwähnt) bietet eine umfassende Veranschaulichung dieser Technik. Weitere Einblicke in den Umgang mit Baumstrukturen in SQL finden Sie in Joe Celkos „Trees and Hierarchies in SQL for Smarties“.

Das obige ist der detaillierte Inhalt vonWie kann ich Nachkommen oder Vorfahren in einer MySQL-Baumstruktur effizient abfragen, ohne die Tiefe anzugeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage