PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Подредете коментарите по пътя на нишката и по общия брой гласове

Просто натрупайте друг масив до пътя, който ще съдържа не само id от всеки коментар по пътя му, но total_votes (като отрицателно число) преди всеки id. След това можете да поръчате по тази колона.

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)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да създадете просто размито търсене само с PostgreSQL?

  2. SQL LIKE условие за проверка за цяло число?

  3. Предоставете всички по конкретна схема в db на групова роля в PostgreSQL

  4. Защо дори да използвате *DB.exec() или подготвени изрази в Golang?

  5. [Видео] Сила на индексиране в PostgreSQL