【问题标题】:Get Category Level获取类别级别
【发布时间】:2018-04-16 06:32:12
【问题描述】:

在 MySql 中,我有带有字段的类别表:

  • cat_id (int)
  • cat_parent_id (int)
  • cat_name(字符串)

如何创建查询以返回具有对应级别编号的所有类别的列表

根节点的cat parent_id 为0

示例 SQL Fiddle 与示例数据:http://sqlfiddle.com/#!9/ba439ae/3

我有 MySql 版本:5.7.19 而 Fiddle 是 5.6

【问题讨论】:

  • 还可以查看带有标签hierarchical-data的许多其他问题。
  • @BillKarwin 对我来说这是一个完全不同的问题。他们在寻找面包屑我需要结果表,其中包含一些导出的级别......有了重复问题的知识,我也许可以为我的案例创建一个解决方案,但它不是重复的。
  • 我已经推翻了我的投票,认为这是重复的。但我建议您阅读各种分层数据问题。它们可能与您的查询不完全相同,但原理是相同的——查询层次结构中的所有后代。

标签: mysql sql hierarchical-data


【解决方案1】:

试试这个:

WITH cte AS
(
  SELECT 
    cat_id, 
    cat_parent_id,
    cat_name,
    0 AS level
  FROM category
  WHERE cat_parent_id = 0
  UNION ALL
  SELECT 
    cat.cat_id, 
    cat.cat_parent_id,
    cat.cat_name,
    (level + 1) AS level
  FROM category cat
  INNER JOIN cte c
    ON c.cat_id = cat.cat_parent_id
)

SELECT 
  cat_id, 
  cat_parent_id,
  cat_name,
  level
FROM cte
--ORDER BY level;

【讨论】:

  • OP 说他正在使用 MyQL 5.7。 MySQL 8.0 之前不支持 CTE 语法。
  • oooops.. 可以使用任一循环(使用光标时)?
  • @StackOverflow 对此表示感谢,但这在 5.7 中不起作用
猜你喜欢
  • 1970-01-01
  • 2020-05-25
  • 1970-01-01
  • 1970-01-01
  • 2013-03-25
  • 1970-01-01
  • 2012-06-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多