首頁 > 資料庫 > mysql教程 > 如何僅透過一次資料庫檢索 PHP/MySQL 中的分層類別資料?

如何僅透過一次資料庫檢索 PHP/MySQL 中的分層類別資料?

Linda Hamilton
發布: 2024-10-23 17:46:01
原創
661 人瀏覽過

How to Retrieve Hierarchical Category Data in PHP/MySQL with Just One Database Pass?

PHP/MySQL 中的類別層次結構

在PHP/MySQL 中,使用分層結構儲存類別和子類別是非常有效率的鄰接表模型。為了有效地檢索這種分層數據,我們可以採用一種只需要一次資料庫傳遞的方法。

一次性資料擷取演算法

讓我們建立一個 $refs 陣列並一個 $list 數組,類似於所提供的答案中提供的內容。

<code class="php">$refs = [];
$list = [];

$sql = "SELECT category_id, parent_id, name FROM categories ORDER BY name";

$result = $pdo->query($sql);

foreach ($result as $row) {
    $ref = &$refs[$row['category_id']];

    $ref['parent_id'] = $row['parent_id'];
    $ref['name'] = $row['name'];

    if ($row['parent_id'] == 0) {
        $list[$row['category_id']] = &$ref;
    } else {
        $refs[$row['parent_id']]['children'][$row['category_id']] = &$ref;
    }
}</code>
登入後複製

此演算法有效地建構了分層資料結構。 $refs 陣列儲存所有類別的引用,$list 陣列包含對頂級類別(沒有父類別的類別)的引用。

遞歸列表產生

要將分層結構輸出為HTML 列表,可以使用如下遞歸函數:

<code class="php">function toUL(array $array)
{
    $html = '<ul>';

    foreach ($array as $value) {
        $html .= '<li>' . $value['name'];
        if (!empty($value['children'])) {
            $html .= toUL($value['children']);
        }
        $html .= '</li>';
    }

    $html .= '</ul>';

    return $html;
}</code>
登入後複製

此函數遞歸地建立HTML 列表,有效地表示從資料庫取得的分層資料。

以上是如何僅透過一次資料庫檢索 PHP/MySQL 中的分層類別資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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