我正在写一个评论系统。我已经能够按照这里的教程获得层次结构(http://www.postgresonline.com/journal/archives/173-Using-LTree-to-Represent-and-Query-Hierarchy-and-Tree-Structures.html )
SELECT n.node_path AS PATH,
n.note_id AS _1,
n.note_no AS _2,
n.public_key AS _3,
n.upvotes AS _4
FROM public.comment_table AS n
INNER JOIN public.comment_table AS a ON (a.node_path @> n.node_path)
GROUP BY _1, PATH
ORDER BY PATH
但是,我无法通过投票来订购该行。我不能简单地ORDER BY PATH, n.upvotes
在这里,因为同一线程上的回复会有不同的node paths
. node_paths
使用 计算public_key
。
从例子中,给定
a (0 upvotes)
-> b (0 upvotes)
-> c (1 upvote)
d (1 upvote)
-> e (0 upvotes)
b
an的节点路径分别c
是a.b
和a.c
。我不能简单地从节点路径和它们中减去b
和。如果我这样做,它将导致以下顺序:c
ORDER BY
a
d
-> b
-> c
-> e
这是有道理的,因为如果您public_key
从中删除每一行node_path
,它将简单地按最短node_path
到最长排序。
如何编写一个查询,该查询将产生正确的层次结构并按如下方式排序:
d (1)
-> e (0)
a (0)
-> c (1)
-> b (0)