PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Uporządkuj komentarze według ścieżki wątku i całkowitej liczby głosów

Po prostu zbierz kolejną tablicę obok ścieżki, która będzie zawierać nie tylko id każdego komentarza w jego ścieżce, ale total_votes (jako liczba ujemna) przed każdym identyfikatorem. Następnie możesz zamawiać według tej kolumny.

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 (tylko dane -- bez rekurencyjnego 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. Zapytanie ActiveRecord znacznie wolniej niż prosty SQL?

  2. Driver:[email protected] zwrócił wartość null dla adresu URL... Podczas wdrażania wiosennego rozruchu w Heroku

  3. PostgreSQL Composite klucz podstawowy i przyrost seryjny?

  4. Dlaczego nie można przekonwertować wartości NULL na wartość JSON w postgreSQL?

  5. Czy istnieje PHP mysql_real_escape_string dla postgresql?