首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >MySQL按父项和子项排序

MySQL按父项和子项排序
EN

Stack Overflow用户
提问于 2018-09-04 01:16:40
回答 2查看 171关注 0票数 0

下面是一个简单的表格:

代码语言:javascript
复制
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

我正在搜索一个可以排序和输出这些行的查询,如下所示:

代码语言:javascript
复制
TitleA
  TitleAA
  TitleAB
  TitleAC
TitleB
  TitleBA
  TitleBB
TitleC
  TitleCA

因此,行应该按第一个父项排序,然后是它的子项排序。然后是下一个父项,接着是它的子项,依此类推。

父母自己的顺序并不重要!标题只是为了更好地理解,不能用于排序。重要的是,孩子们要在父母的指导下进行分类。

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

代码语言:javascript
复制
SELECT *
FROM table t1
     LEFT JOIN table t2
     ON t2.id = t1.parent 
ORDER BY COALESCE(t1.ordering, t2.ordering), t2.ordering   
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-04 02:31:55

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

代码语言:javascript
复制
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);

结果如下:

代码语言:javascript
复制
TitleC
TitleCC
TitleA
TitleAA
TitleAB
TitleAC
TitleB
TitleBA
TitleBB

要缩进每个组的标题,可以使用MS Access中的report之类的内容。我已经在MS Access中准备好了,所以在MySQL语法上可能会略有不同。

票数 2
EN

Stack Overflow用户

发布于 2018-09-04 02:04:50

代码语言:javascript
复制
SELECT *, if(parent = 0, id, parent) as main_order
FROM `tbl`
ORDER by main_order, ordering, parent

我认为这个查询对单亲孩子是正确的。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52154009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档