sql >> Databáze >  >> RDS >> PostgreSQL

Seřaďte komentáře podle cesty vlákna a podle celkového počtu hlasů

Stačí nashromáždit další pole vedle cesty, které nebude obsahovat pouze id každého komentáře v jeho cestě, ale total_votes (jako záporné číslo) před každým id. Poté můžete objednávat podle tohoto sloupce.

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 (pouze data -- bez rekurzivního CTE)



  1. Ručně zadejte hodnotu primárního klíče ve sloupci JPA @GeneratedValue

  2. MySQL VARCHAR(255) UTF8 je pro klíč příliš dlouhý, ale maximální délka je 1000 bajtů

  3. Výkonnostní důsledky plánování událostí MySQL

  4. Jak používat SYS_REFCURSUR ve výběru pro aktualizaci v pl/sql