gpt4 book ai didi

mysql - 同表父子排序

转载 作者:可可西里 更新时间:2023-11-01 08:20:41 24 4
gpt4 key购买 nike

我有一张这样的 table -

id  name        ordering    catid 
1 parent1 1 0
2 parent2 2 0
3 parent3 3 0
4 child11 1 1
5 child12 2 1
6 child21 1 2
7 child22 2 2
8 child31 1 3
9 child32 2 3

我正在尝试获得如下结果-

id  name        ordering    catid 
1 parent1 1 0
4 child11 1 1
5 child12 2 1
2 parent2 2 0
6 child21 1 2
7 child22 2 2
3 parent3 3 0
8 child31 1 3
9 child32 2 3

我想订购第一个 parent(catid=0) 而不是它的 child 而不是第二个 parent 及其 child 。这是否有可能通过这些专栏达到预期的结果。我尝试加入但没有成功。当然我做的不对。这是我试过的-

SELECT a.*,c.name AS category_title FROM table AS a 
LEFT JOIN table AS c ON c.id = a.catid
ORDER BY c.ordering asc, a.ordering asc

最佳答案

此查询将在同一个表上执行 SELF JOIN,方法是将第一个表中的记录与相应的父记录连接起来。如果父级存在,则 parentId 列将包含记录的父级 ID,否则为记录本身的 ID。然后,结果按 parentId 排序,然后按 ID 排序,以便父项始终出现在给定的父项及其子项组中的顶部。

SELECT
m.id,
m.name,
m.catid,
m.ordering,
p.ordering,
case
WHEN p.ordering IS NULL THEN m.ordering * 10
ELSE m.ordering + p.ordering * 10
END AS parentId
FROM
MyTable m
LEFT JOIN MyTable p
ON m.catid = p.id
ORDER BY parentId

结果如下:

1   parent1 0   1       10
4 child11 1 1 1 11
5 child12 1 2 1 12
2 parent2 0 2 20
6 child21 2 1 2 21
7 child22 2 2 2 22
3 parent3 0 3 30
8 child31 3 1 3 31
9 child32 3 2 3 32

关于mysql - 同表父子排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12873554/

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