gpt4 book ai didi

mysql - 如何在 mysql 查询中列出父项之后的子项

转载 作者:行者123 更新时间:2023-11-29 07:27:32 25 4
gpt4 key购买 nike

我在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 |

View on DB Fiddle

关于mysql - 如何在 mysql 查询中列出父项之后的子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53098248/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com