MySQL 中的樹結構查詢:深度無關遍歷
在 MySQL 中存取樹結構資料通常涉及遞歸或順序查詢。但是,可以檢索樹結構表中給定行的所有後代或祖先,而無需使用單一查詢明確指定深度等級。這種技巧稱為修改前序樹遍歷。
查詢方法
在具有id、data 和parent_id 列的樹結構表中,修改後的前序遍歷查詢可以公式如下:
SELECT id, data, parent_id FROM tree_table WHERE id IN ( SELECT id FROM tree_table WHERE ancestry LIKE '%given_id/%' )
這裡,given_id 表示該行的ID您想要檢索後代或祖先。
使用和實作
查詢字串 'ancestry LIKE '%given_id/%'' 過濾具有給定 ID 的行作為他們祖先道路的一部分。這可確保返回所有後代(以及給定行)。要檢索祖先,只需將 '%given_id/%' 替換為 '%/given_id/%'。
例如,在使用MySQLi 的PHP 中:
$stmt = $mysqli->prepare("SELECT id, data, parent_id FROM tree_table WHERE id IN (SELECT id FROM tree_table WHERE ancestry LIKE '%?/%')");
其他資訊
Sitepoint 提供的PHP 範例(在答案中提到)提供了對此的全面說明技術。有關在 SQL 中處理樹結構的更多見解,請參閱 Joe Celko 的「Smarties SQL 中的樹層結構」。
以上是如何在不指定深度的情況下有效率地查詢 MySQL 樹結構中的後代或祖先?的詳細內容。更多資訊請關注PHP中文網其他相關文章!