我的表中有这些记录:
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
答案 0 :(得分:1)
如果不超过1个级别,您可以在您的order by子句中使用CASE
表达式:
SELECT a.*,
CASE WHEN SUB = 0 THEN ID ELSE SUB END expression
FROM test a
ORDER BY CASE WHEN SUB = 0 THEN ID ELSE SUB END, SUB, TITLE
使用该表达式,它将始终由parentId排序,即填充时为SUB
列,或者当它不是孩子时为ID
列。
会导致:
ID TITLE SUB EXPRESSION
1 Parent 1 0 1
3 Sub 1-1 1 1
5 Sub 1-2 1 1
2 Parent 2 0 2
6 Sub 2-1 2 2
4 Parent 3 0 4
7 Parent 4 0 7
如果任何Child可能是另一条记录的父级(例如Sub 1-2-1),它仍然会失败。
答案 1 :(得分:0)
试试这个
SELECT * ,replace(replace(title,'Parent',''),'Sub','') as nums
FROM Table1
order by nums
会导致
ID TITLE SUB NUMS
1 Parent 1 0 1
3 Sub 1-1 1 1-1
5 Sub 1-2 1 1-2
2 Parent 2 0 2
6 Sub 2-1 2 2-1
4 Parent 3 0 3
7 Parent 4 0 4
EDIT。
由于你的问题的结果不同。试试这个
SELECT * ,replace(title,'Item','') as nums
FROM category
order by nums
Obs:请确保Item
与数字分开。