首页  >  文章  >  数据库  >  如何使用单个查询从 MySQL 数据库中检索递归类别?

如何使用单个查询从 MySQL 数据库中检索递归类别?

Barbara Streisand
Barbara Streisand原创
2024-11-08 10:50:01694浏览

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

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