【发布时间】:2013-01-11 16:09:31
【问题描述】:
我的表中有这些记录:
id | title | sub
-----+-------------+------
1 | Parent 1 | 0
2 | Parent 2 | 0
3 | Sub 1-1 | 1
4 | Parent 3 | 0
5 | Sub 1-2 | 1
6 | Sub 2-1 | 2
7 | Parent 4 | 0
现在我想用这样的一个查询从我的表中选择这些记录:
id | title | sub
-----+-------------+------
1 | Parent 1 | 0
3 | Sub 1-1 | 1
5 | Sub 1-2 | 1
2 | Parent 2 | 0
6 | Sub 2-1 | 2
4 | Parent 3 | 0
7 | Parent 4 | 0
我想先按父级排序我的记录,然后再按子级排序。
如何在 mySQL 中执行此操作?
更新:
我使用这个查询:
SELECT a.*,
CASE WHEN SUB = 0 THEN ID ELSE SUB END expression
FROM category a
ORDER BY CASE WHEN SUB = 0 THEN ID ELSE SUB END, ID
我的数据是:
id | title | sub
----+---------------+-------
1 | Parent 1 | 0
2 | Parent 2 | 0
3 | Sub 1-1 | 7
4 | Parent 3 | 0
5 | Sub 1-2 | 4
6 | Sub 2-1 | 2
7 | Parent 4 | 0
结果是:
id | title | sub | expression
----+-----------+-------+-----------
1 | Parent 1 | 0 | 1
2 | Parent 2 | 0 | 2
6 | Sub 2-1 | 2 | 2
4 | Parent 3 | 0 | 4
5 | Sub 1-2 | 4 | 4
3 | Sub 1-1 | 7 | 7
7 | Parent 4 | 0 | 7
【问题讨论】:
-
如果你用java等其他语言来做这件事会很可行
-
顺便说一句,通常的做法是用 NULL 而不是 0 来表示孤儿(没有父节点的节点)。
标签: mysql sorting select parent-child