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