【问题标题】:Sort a tree data structure对树数据结构进行排序
【发布时间】:2018-03-14 10:56:59
【问题描述】:

我有一张这样的桌子:

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)
) 

显示顺序在同一个父级中是相对的。

我一直坚持对这些数据进行排序以得到如下输出:

1 -> 1.1 -> 1.1.1 -> 1.1.2 -> 1.1.3 -> 1.2 -> 1.3 -> 2 -> 3

如果您能帮助我,我们将不胜感激。谢谢!

【问题讨论】:

标签: sql postgresql hierarchical-data recursive-query


【解决方案1】:

您需要一个递归查询来遍历树。要在每个级别正确应用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;

在线示例:http://rextester.com/MJEL66144

【讨论】:

  • 注意:如果节点{11,12,13}的显示顺序在它们之间排列,这可能不起作用。(示例数据不够pathalogical)跨度>
  • 非常感谢。你救了我的命!我确实想出了一个递归查询,但不知道排序数组是由索引完成的。很有用!!!
猜你喜欢
  • 2011-05-24
  • 1970-01-01
  • 2020-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-12
相关资源
最近更新 更多