gpt4 book ai didi

mysql - 在mysql中选择父记录之后具有子值的记录

转载 作者:行者123 更新时间:2023-11-29 00:35:24 26 4
gpt4 key购买 nike

我的表中有这些记录:

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

我想先按 parent 对我的记录进行排序,然后再按 child 排序。

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

最佳答案

如果不超过 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

如果任何子项可能是另一条记录的父项(例如 Sub 1-2-1),它仍然会失败。

关于mysql - 在mysql中选择父记录之后具有子值的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14560032/

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