コメントシステムを書いています。ここのチュートリアルに従って階層を取得できました( 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
それぞれおよびc
になります。ノードパスとそれらから単純に and を差し引くことはできません。私がそうすると、次の順序になります。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)