首頁  >  文章  >  資料庫  >  如何使用單一查詢遞歸填入 MySQL 中的層次類別?

如何使用單一查詢遞歸填入 MySQL 中的層次類別?

Linda Hamilton
Linda Hamilton原創
2024-11-08 06:32:01836瀏覽

How to Recursively Populate Hierarchical Categories in MySQL with a Single Query?

使用單一MySQL 查詢填充遞歸類別

將網站的內容組織為分層類別對於有效檢索這些類別提出了挑戰用於顯示。本文深入探討了使用 PHP 和 MySQL 遞迴檢索類別資料最有效的方法。

遞歸結構:分層樹

想像一個組織有文章和部分的網站在樹狀結構中。每個部分可能有一個父部分,可能導致多層嵌套。例如:

  • 主題 1

    • 主題 2

      • 主題 3
    • 主題 3
    • 主題 3
      • 主題4
      • 科目5

        • 科目6
      • 科目7
  • 主題8

主題9

MySQL 查詢:取得父子關係

SELECT category_id, name, parent
FROM categories
ORDER BY parent

MySQL 查詢:取得父子關係

要遞歸此資料。 ,我們需要取得父級-來自MySQL 資料庫的子關係。以下的查詢完成此任務:

$nodeList = array(); // Associative array to store category nodes
$tree = array(); // Array to hold the root nodes

// Populate the $nodeList array with category data
$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, array('children' => array()));
}
mysql_free_result($query);

// Populate the $tree array with root nodes (those without a parent)
foreach ($nodeList as $nodeId => &$node) {
    if (!$node['parent'] || !array_key_exists($node['parent'], $nodeList)) {
        $tree[] = &$node;
    } else {
        // If the node has a parent, add it as a child of that parent
        $nodeList[$node['parent']]['children'][] = &$node;
    }
}

// Clean up the variables
unset($node);
unset($nodeList);

// The $tree array now contains the hierarchical tree structure

PHP 腳本:建構樹結構

取得資料後,我們可以在PHP 中建構樹結構處理複雜的嵌套場景。以下是範例腳本:

效能注意事項

這種基於 PHP 的方法特別有效,即使對於大型樹也是如此。它避免了進行多個遞歸 MySQL 查詢的開銷,這會顯著降低效能。

結論這種高效的 PHP 和 MySQL 解決方案可讓您遞歸檢索類別資料不犧牲效能。透過利用巧妙的基於引用的方法,我們可以建立複雜的層次結構,而不需要複雜的資料庫查詢。

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn