【发布时间】:2020-06-27 15:44:27
【问题描述】:
我正在使用 MySQL,我想知道是否可以更改递归 CTE 生成的结果的顺序。
我的表有这些列:
|----------|----------|----------|----------|
| ID | parentID | title | Sort |
|----------|----------|----------|----------|
| 1 | null | Maria | 1 |
| 2 | 1 | John | 2 |
| 3 | 2 | Maria | 3 |
| 4 | 1 | Anthony | 1 |
| 5 | 4 | XXX | 1 |
| 6 | 4 | ... | 2 |
| 7 | 2 | ... | 2 |
| 8 | 2 | ... | 1 |
| 9 | 1 | ... | 3 |
我使用以下查询(我们不考虑排序列)
WITH RECURSIVE cte AS
(
SELECT ID, parentID, title, 0 AS depth, CAST(ID AS CHAR(200)) AS path
FROM categories WHERE ID = 1
UNION ALL
SELECT c.ID, c.parentID, c.title, cte.depth + 1, CONCAT(cte.path, ',', c.ID)
FROM categories c
JOIN cte ON cte.parentID = c.ID
WHERE FIND_IN_SET(c.ID, cte.path)=0
)
SELECT * FROM cte ORDER BY cte.path
接下来是我们从上述查询中获得的分层结果(以 ID 为单位)。我们完全忽略了排序列。
Hierarchy Depth
1 2 3
| | |
IDs
1
2
3
7
8
4
5
6
9
我想要的是一个考虑sort 列并创建以下顺序的查询。从您看到的 4、2、9 的 ID 分别具有 1、2、3 的排序编号,并且在深度级别 2 和所有深度级别的结果中都考虑了该顺序。
Hierarchy Depth
1 2 3
| | |
IDs
1
4
5
6
2
8
7
3
9
正在寻找对我的查询进行编辑以实现上述结果。
【问题讨论】:
-
格式有点乱我猜,你能解决它吗
标签: mysql sql common-table-expression