首頁 > 資料庫 > mysql教程 > 如何在不指定深度的情況下有效率地查詢 MySQL 樹結構中的後代或祖先?

如何在不指定深度的情況下有效率地查詢 MySQL 樹結構中的後代或祖先?

Patricia Arquette
發布: 2025-01-06 17:30:41
原創
801 人瀏覽過

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

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板