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
Patricia ArquetteOriginal
2025-01-06 17:30:41779Durchsuche

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/%'
)

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 '%?/%')");

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!

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