我在mysql表中有这样的数据
id || act || parent || level
1 || 13 || 0 || 1
2 || 13 || 0 || 1
3 || 13 || 1 || 2
4 || 13 || 2 || 2
5 || 13 || 1 || 2
如果我想要这样的结果,如何在mysql中查询:
id || act || parent || level
1 || 13 || 0 || 1
3 || 13 || 1 || 2
5 || 13 || 1 || 2
2 || 13 || 0 || 1
4 || 13 || 2 || 2
谢谢:)
答案 0 :(得分:1)
这里的技巧是确定自定义排序参数。 parent
的值为0,我们可以简单地使用该行的id
的值;否则为parent
值。这是因为其他级别的parent
值与父级的id
行相同。
我们还将使用多级Order By
,第二级排序使用id
。
您可以执行以下操作:
SELECT
id,
act,
parent,
level,
(CASE WHEN parent = 0 THEN id ELSE parent END) AS custom_sort_parameter
FROM
your_table_name
ORDER BY custom_sort_parameter, id
为了便于阅读和易于理解,我在custom_sort_parameter
子句中完成了Select
的计算。但是您可以改为将其移到Order By
子句中(以避免再获得一个不必要的列)。它显示在下面的演示中。
模式(MySQL v5.7)
Create table your_table_name
(id int, act int, parent int, level int);
Insert into your_table_name
VALUES (1,13,0,1),
(2,13,0,1),
(3,13,1,2),
(4,13,2,2),
(5,13,1,2);
查询#1
SELECT
id,
act,
parent,
level
FROM
your_table_name
ORDER BY
CASE
WHEN parent = 0 THEN id
ELSE parent
END
, id;
| id | act | parent | level |
| --- | --- | ------ | ----- |
| 1 | 13 | 0 | 1 |
| 3 | 13 | 1 | 2 |
| 5 | 13 | 1 | 2 |
| 2 | 13 | 0 | 1 |
| 4 | 13 | 2 | 2 |