【发布时间】:2018-09-03 17:16:39
【问题描述】:
这里是一个简单的表格:
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
【问题讨论】:
-
你至少给我们看看你的桌子怎么样?
-
你看到上面的表格了吧?
-
如果是这种情况,简单的“ORDER BY title”就可以了。
-
标题是我选择的,以便更好地理解这个例子。当然,您不能在现实生活中按字母顺序排序。这应该很清楚。
-
我们是否应该假设您还选择了什么?你怎么知道 TitleA 应该在 TitleB 前面?