mysql 查询多级类别_SQL处理多级分类,查询结果呈树形结构 5.x版本
时间: 2024-01-03 13:02:54
浏览: 288
SQL处理多级分类,查询结果呈树形结构
在 MySQL 5.x 版本中,可以使用递归查询来实现处理多级分类。以下是一个示例:
假设我们有一个名为 `category` 的表,其中包含以下字段:
- `id`:分类 ID
- `name`:分类名称
- `parent_id`:父级分类 ID,如果该分类为顶级分类,则 `parent_id` 为 NULL
我们要查询所有分类,并将结果按树形结构展示,可以使用以下 SQL 语句:
WITH RECURSIVE category_tree (id, name, parent_id, depth, path) AS (
SELECT id, name, parent_id, 0, CAST(id AS CHAR(200))
FROM category
WHERE parent_id IS NULL
UNION ALL
SELECT c.id, c.name, c.parent_id, ct.depth + 1, CONCAT(ct.path, ',', c.id)
FROM category c
JOIN category_tree ct ON c.parent_id = ct.id
SELECT id, name, parent_id, depth
FROM category_tree
ORDER BY path;
上述 SQL 语句中使用了 `WITH RECURSIVE` 关键字来实现递归查询。具体来说,它定义了一个名为 `category_tree` 的临时表,用于存储查询结果。该表包含以下列:
- `id`:分类 ID
- `name`:分类名称
- `parent_id`:父级分类 ID
- `depth`:分类深度,即该分类从顶级分类开始算起的层数
- `path`:分类路径,即从顶级分类到该分类的 ID 列表,用逗号隔开
递归查询分为两部分。第一部分查询所有顶级分类(即 `parent_id` 为 NULL 的分类),并将它们加入 `category_tree` 表中。第二部分查询所有非顶级分类,并将它们与它们的父级分类关联起来,构建出完整的分类树。
最后,我们从 `category_tree` 表中选取所需的列,按照分类路径排序即可得到结果。
阅读全文