首頁 > 資料庫 > mysql教程 > 如何使用 PHP 和 MySQL 查詢結果來擷取父節點下的所有子節點、孫節點和後代節點?

如何使用 PHP 和 MySQL 查詢結果來擷取父節點下的所有子節點、孫節點和後代節點?

Susan Sarandon
發布: 2024-11-09 01:35:02
原創
901 人瀏覽過

How do I retrieve all child, grandchild, and descendant nodes under a parent node using PHP with MySQL query results?

使用PHP 和MySQL 查詢結果獲取父級下的所有子節點、孫節點等

原始問題:

檢索與父節點關聯的所有子節點、孫子節點和後續後代節點是使用分層資料結構時的常見任務。這個問題出現在資料庫表採用鄰接表模型進行資料組織的場景。

使用遞歸的方法:

為了解決這個問題,遞歸被證明是一種有效的方法方法。以下是如何使用遞歸來實現此目標的詳細說明:

1.建立基本函數:

遞歸函數是一種呼叫自身來解決問題的函數,通常用於涉及分層或嵌套資料結構的場景。在本例中,我們的基底函數將命名為 fetch_recursive.

2。決定遞歸呼叫的標準:

在 fetch_recursive中,兩個主要條件決定何時進行遞歸呼叫:

  • 找到父節點:噹噹前正在評估的節點是我們感興趣的父節點(基於提供的
  • 找到子節點:目前節點有與父節點ID 相符的父節點ID時。數組。節點(透過children屬性的存在來識別),將進行另一個遞歸呼叫來檢索這些子節點。 🎜>

1。的遞歸性質確保它會自動遍歷層次結構,不僅檢索子節點,還檢索孫子和後續後代。 。 🎜>

用法:

要使用 fetch_recursive 函數,只需傳遞原始資料數組(在本例中為 $data)和要從中檢索後代的節點的 ID。例如,要擷取節點 3 下的所有子節點、孫節點和後代節點:

function fetch_recursive($src_arr, $currentid, $parentfound = false, $cats = array())
{
    foreach($src_arr as $row)
    {
        if((!$parentfound && $row['id'] == $currentid) || $row['parent_id'] == $currentid)
        {
            $rowdata = array();
            foreach($row as $k => $v)
                $rowdata[$k] = $v;
            $cats[] = $rowdata;
            if($row['parent_id'] == $currentid)
                $cats = array_merge($cats, fetch_recursive($src_arr, $row['id'], true));
        }
    }
    return $cats;
}
登入後複製

這將使用包含所有相關節點的陣列填入 $list 變數。

以上是如何使用 PHP 和 MySQL 查詢結果來擷取父節點下的所有子節點、孫節點和後代節點?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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