mysql - 如何选择数据并获得层次结构结果

标签 mysql sql database

我有一个包含类别列表的表格

表结构

- ID
- category_name
- parent_category_ID // 0 indicates no parent

假设表中有以下数据

ID  | category_name | parent_category_ID
1   | verbs         | 0
2   | adjectives    | 0
3   | nouns         | 0
4   | go            | 1
5   | color         | 3
6   | bag           | 3
7   | good          | 2
8   | play          | 1
9   | polite        | 2
10  | t1            | 5
11  | t2            | 5
12  | t3            | 8

我希望结果按此顺序

ID  | category_name | parent_category_ID
1   | verbs         | 0
4   | go            | 1
8   | play          | 1
12  | t3            | 8
2   | adjectives    | 0
7   | good          | 2
9   | polite        | 2
3   | nouns         | 0
5   | color         | 3
10  | t1            | 5
11  | t2            | 5
6   | bag           | 3

这将使结果看起来像它们一样

verbs
--- go
--- play
--- --- t3
adjectives
--- good
--- polite
nouns
--- color
--- --- t1
--- --- t2
--- bag

我实际上不知道如何开始这样做,因为我的 SQL 经验仍然是初学者。

最佳答案

不太确定我是否理解正确,但试试这个:

SELECT 
      id, 
      category_name, 
      parent_category_ID
FROM  yourTableName
ORDER BY CASE 
WHEN parent_category_ID = 0 
THEN ID 
ELSE parent_category_ID END, id

演示:SQL FIDDLE

关于mysql - 如何选择数据并获得层次结构结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23169140/

相关文章:

php - 在 Yii 中使用动态过滤器和动态连接执行搜索

mysql - 单条记录按主键更新慢

php - 仅当两个字段同时为空时,Mysql 才更新字段

Android机房一对多关系

mysql - 对 MySQL 使用 UTF-8

php - 如何合并同一个表的多个 INSERT 查询

java - 以 LIFO 方式显示数据库中的数据

mysql - 选择特朗普今日记录.time()

android - Room - 是否可以在查询中使用 OFFSET 和 FETCH NEXT?

php - 无法让 UPSERT 在具有自动增量列和 FK 的 MYSQL 上工作