MYSQL中的主表和父表_mysql-同一表中的父子顺序

我有一张这样的桌子-

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

我要订购的第二个父级及其子级要比其子级的第一个父级(catid = 0).

我可以尝试使用这些列,但未成功.

当然,我没有正确执行.

这就是我尝试过的

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

标签:sql,mysql

来源: https://codeday.me/bug/20191127/2074739.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值