sql >> データベース >  >> RDS >> PostgreSQL

スレッドパスと総投票数でコメントを並べ替える

    パスの横に別の配列を蓄積するだけで、witchには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. 重複をチェックするためのトリガー

    2. Djangoおよびpostgresqlスキーマ

    3. Oracleがサポートするバージョンマトリックス

    4. WindowsでRMySQLを使用する方法は?