在 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中文網其他相關文章!