पथ के बगल में बस एक और सरणी जमा करें, डायन में न केवल id
होगा अपने पथ में प्रत्येक टिप्पणी की, लेकिन total_votes
(ऋणात्मक संख्या के रूप में) प्रत्येक आईडी से पहले। उसके बाद, आप उस कॉलम के अनुसार ऑर्डर कर सकते हैं।
WITH RECURSIVE first_comments AS (
(
(
SELECT id, text, level, parent_id, array[id] AS path, total_votes,
array[-total_votes, id] AS path_and_votes
FROM comments
WHERE comments."postId" = 1 AND comments."level" = 0
)
)
UNION
(
SELECT e.id, e.text, e.level, e.parent_id, (fle.path || e.id), e.total_votes,
(fle.path_and_votes || -e.total_votes || e.id)
FROM
(
SELECT id, text, level, parent_id, total_votes FROM comments
WHERE comments."postId" = 1
) e, first_comments fle
WHERE e.parent_id = fle.id
)
)
SELECT id, text, level, total_votes, path from first_comments ORDER BY path_and_votes ASC
SQLFiddle (केवल डेटा -- पुनरावर्ती CTE के बिना)