如何使用單一查詢從 MySQL 資料庫中檢索遞歸類別?

Barbara Streisand
發布: 2024-11-08 10:50:01
原創
693 人瀏覽過

How to Retrieve Recursive Categories from a MySQL Database with a Single Query?

使用單一MySQL 查詢擷取遞歸類別

在組織網站內容的脈絡中,遞迴類別允許具有多個層級的分層結構。為了從 MySQL 資料庫中有效地檢索此類類別,通常使用單一查詢。

MySQL 提供 CONNECT_BY_ROOT 運算符,該運算符可以遞歸選擇資料。考慮以下查詢:

SELECT category_id, name, parent
FROM categories
CONNECT BY ROOT parent
ORDER BY LEVEL
登入後複製

此查詢擷取表中的所有類別,並根據父列分層連接它們。 LEVEL 函數為每一行分配一個級別,指示其在層次結構中的位置,頂級類別的級別為 1。

要在 PHP 中建立遞歸樹結構,請將查詢結果轉換為數組,其中每個類別表示為具有孩子屬性的節點。以下範例說明了這個過程:

$nodeList = [];
$tree = [];

$query = mysql_query("SELECT category_id, name, parent FROM categories ORDER BY parent");
while ($row = mysql_fetch_assoc($query)) {
    $nodeList[$row['category_id']] = array_merge($row, ['children' => []]);
}

foreach ($nodeList as $nodeId => &$node) {
    if (!$node['parent'] || !array_key_exists($node['parent'], $nodeList)) {
        $tree[] = &$node;
    } else {
        $nodeList[$node['parent']]['children'][] = &$node;
    }
}
unset($node);
unset($nodeList);

// Return the tree structure
return $tree;
登入後複製

此 PHP 程式碼建構了一個反映類別之間層次關係的多維數組。頂級類別放置在 $tree 數組中,它們的子級嵌套在各自的子級數組中。

這種方法利用對節點的引用,與創建新節點物件相比,可以最大限度地減少記憶體使用量。它還避免了遞歸 SQL 查詢,使其對於大型樹結構更有效率。

以上是如何使用單一查詢從 MySQL 資料庫中檢索遞歸類別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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