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