【发布时间】:2021-02-25 15:53:09
【问题描述】:
我有一个树状结构的类别表(见下图)。对于快速的单个查询,我有以下 SQL 来获取完整的树。
WITH RECURSIVE search_tree(id, name, path, position) AS
(
SELECT id, name, ARRAY[id], position
FROM table_name
WHERE id = id
UNION ALL
SELECT table_name.id, table_name.name, path || table_name.id,
table_name.position
FROM search_tree
JOIN table_name ON table_name.parent_id = search_tree.id
WHERE NOT table_name.id = ANY(path)
)
SELECT id, name, path, position
FROM search_tree
ORDER BY path
此查询结果如下表
id | name | path | position
----+--------------+---------+-------------
1 | Cat Pictures | {1}. |. 0
2 | Funny | {1,2}. |. 0
3 | LOLCats | {1,2,3} |. 1
4 | Animated | {1,2,4} |. 2
5 | Classic | {1,2,5} |. 0
6 | Renaissance | {1,6} |. 1
所以根据路径排序效果很好。但我需要的是根据列位置的顺序,如果路径级别是同一级别(如 id 2 & 4 和 3、4、5)。
因此 ID 的顺序需要是
ids: 1, 6, 2, 5, 3, 4
如何更改我的 SQL 语句以反映该顺序?
【问题讨论】: