MySQL按父母和子女排序

时间:2018-09-03 17:16:40

标签: mysql sorting

这是一个简单的表:

id, title, parent, ordering
---------------------------
3242, TitleB, 0, 1
6574, TitleBA, 3242, 1
2346, TitleBB, 3242, 2
2344, TitleA, 0, 1
7346, TitleAC, 2344, 3
3574, TitleAB, 2344, 2
2256, TitleAA, 2344, 1
1435, TitleC, 0, 1
4354, TitleCA, 1435, 1

我正在搜索一个可以排序和输出以下行的查询:

TitleA
  TitleAA
  TitleAB
  TitleAC
TitleB
  TitleBA
  TitleBB
TitleC
  TitleCA

因此,应该由第一父级对行进行排序,然后再由其子项排序。然后是下一个父项,其次是子项,依此类推。

父母自己的订购无所谓!标题仅是为了更好地理解,不能用于排序。重要的是孩子们在父母的陪伴下得到了排序。

这是我所做的最后一个查询:

SELECT *
FROM table t1
     LEFT JOIN table t2
     ON t2.id = t1.parent 
ORDER BY COALESCE(t1.ordering, t2.ordering), t2.ordering   

2 个答案:

答案 0 :(得分:2)

部分解决方案可能是以下查询:

SELECT t.title FROM t GROUP BY IF(parent=0,id,parent), 
IF(parent=0,-1,ordering), t.title ORDER BY IF([parent]=0,
id,parent), IF(parent=0,-1,ordering);

结果如下:

TitleC
TitleCC
TitleA
TitleAA
TitleAB
TitleAC
TitleB
TitleBA
TitleBB

要缩进每个组的标题,可以使用MS Access中的报告之类的东西。 我已经在MS Access中准备了它,因此MySQL语法可能会稍有不同。

答案 1 :(得分:1)

SELECT *, if(parent = 0, id, parent) as main_order
FROM `tbl`
ORDER by main_order, ordering, parent

我认为此查询对于1个父级孩子来说是正确的。

解决同样的问题请看这里: order sql tree hierarchy