首頁  >  文章  >  資料庫  >  如何在MySQL中遞歸遍歷樹結構?

如何在MySQL中遞歸遍歷樹結構?

Barbara Streisand
Barbara Streisand原創
2024-10-24 04:59:02314瀏覽

How to Recursively Traverse a Tree Structure in MySQL?

在 MySQL 中遞歸樹結構

在處理分層資料時,通常需要擷取樹中特定節點的後代結構。在 MySQL 環境中,一個位置可以位於另一個位置內,隨著等級數量的增加,任務會變得更加複雜。

提供的 PHP/MySQL 查詢:

$sql = "SELECT id FROM se_locations_services WHERE parent_locationid IN
( SELECT location_id FROM se_locations_parent WHERE parent_id = '$locationid' )";

有效檢索給定位置的直接後代。

但是,要檢索所​​有後代,無論深度如何,都需要使用遞歸方法。 MySQL 本身並不支援遞歸查詢,但下面連結的mysql.com 綜合文章中概述了一個優雅的解決方案:

[在MySQL 中管理分層資料](https://www.mysql. com/news -and-events/mysql-perspectives/performance-tuning-json-mysql-for-hierarchical-data/)

本文介紹了處理分層資料的各種方法,包括使用CTE(常見表表達式)來實現遞歸:

WITH RECURSIVE descendants (id, parent_id) AS (
    SELECT id, parent_id FROM locations
    UNION ALL
    SELECT l.id, l.parent_id FROM locations l
    JOIN descendants d ON l.parent_id = d.id
)
SELECT DISTINCT id FROM descendants WHERE parent_id = $locationid;

透過使用UNION ALL 運算符,CTE 迭代擴展後代列表,允許MySQL 從單一查詢中檢索完整的層次結構。

以上是如何在MySQL中遞歸遍歷樹結構?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn