首页  >  文章  >  数据库  >  如何仅通过一次数据库检索 PHP/MySQL 中的分层类别数据?

如何仅通过一次数据库检索 PHP/MySQL 中的分层类别数据?

Linda Hamilton
Linda Hamilton原创
2024-10-23 17:46:01540浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn