我在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
先谢谢了:)
最佳答案
这里的技巧是确定自定义排序参数。它的 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
为了代码的可读性和易懂性,我在Select
子句中计算了custom_sort_parameter
。但是您可以将其改为 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 |
关于mysql - 如何在 mysql 查询中列出父项之后的子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53098248/