PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Pesan komentar berdasarkan jalur utas dan dengan jumlah total suara

Cukup kumpulkan array lain di sebelah jalur, penyihir tidak hanya akan berisi id dari setiap komentar di jalurnya, tetapi total_votes (sebagai angka negatif) sebelum setiap id. Setelah itu, Anda dapat memesan berdasarkan kolom tersebut.

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 (hanya data -- tanpa CTE rekursif)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sanitasi input ke kolom di postgres

  2. kumpulan c3p0 tidak dapat membuat koneksi. Bagaimana cara men-debug ini?

  3. Untuk memperbarui beberapa baris yang tidak digandakan sekaligus menggunakan Grup dengan

  4. Pengaturan Replikasi Slony-I Sederhana.

  5. Ulangi tabel dengan PL/pgSQL di Postgres 9.0+