排序树数据结构
Sort a tree data structure
我有一个 table 这样的:
CREATE TABLE tree (
id integer NOT NULL,
name character varying(50) NOT NULL,
parentid integer,
displayorder integer NOT NULL,
CONSTRAINT tree_id PRIMARY KEY (id)
)
The displayorders are relative in the same parent.
我坚持对这些数据进行排序以获得如下输出:
1 -> 1.1 -> 1.1.1 -> 1.1.2 -> 1.1.3 -> 1.2 -> 1.3 -> 2 -> 3
如果你能帮助我,我将不胜感激。谢谢!
您需要一个递归查询来遍历树。要在每个级别上正确应用 displayorder
,您还需要收集每个节点的路径,以便进行排序:
with recursive all_nodes as (
select id, name, parentid, displayorder, array[id] as path
from tree
where parentid is null
union all
select c.id, c.name, c.parentid, c.displayorder, p.path||c.id
from tree c
join all_nodes p on c.parentid = p.id
)
select id, name
from all_nodes
order by path, displayorder;
我有一个 table 这样的:
CREATE TABLE tree (
id integer NOT NULL,
name character varying(50) NOT NULL,
parentid integer,
displayorder integer NOT NULL,
CONSTRAINT tree_id PRIMARY KEY (id)
)
The displayorders are relative in the same parent.
我坚持对这些数据进行排序以获得如下输出:
1 -> 1.1 -> 1.1.1 -> 1.1.2 -> 1.1.3 -> 1.2 -> 1.3 -> 2 -> 3
如果你能帮助我,我将不胜感激。谢谢!
您需要一个递归查询来遍历树。要在每个级别上正确应用 displayorder
,您还需要收集每个节点的路径,以便进行排序:
with recursive all_nodes as (
select id, name, parentid, displayorder, array[id] as path
from tree
where parentid is null
union all
select c.id, c.name, c.parentid, c.displayorder, p.path||c.id
from tree c
join all_nodes p on c.parentid = p.id
)
select id, name
from all_nodes
order by path, displayorder;