这是一个简单的表:
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
答案 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