2016-08-01 11 views
2

私は投稿するコメントを選択したいと思っていますが、特定のcommentIdの先輩ですが、以上少なくとも 5コメントが結果に残っています。Postgresは「少なくとも」の項目を選択します

したがって、5つ以下のコメントがある場合は、sql:SELECT * FROM comments WHERE id >= :comment_idです。もう1つ選択する必要があります。SELECT * FROM comments LIMIT 5

1つのリクエストで同じロジックを得ることは可能ですか?

+0

あなたは何とか 'comment_id + 5 comments'のIDをカウントすることはできますか? SELECT * FROM comments WHERE id> _comment_id + 5 comments_ ORDER BY id DESC LIMIT 5 ' – Adam

答えて

1
with c as (
    select count(*) as c 
    from comments 
    where id >= :comment_id 
) 
select * 
from comments 
where id >= :comment_id 
union all 
(
    select * 
    from comments 
    where id < :comment_id 
    order by id desc 
    limit greatest(5 - (select c from c), 0) 
) 
; 
+0

申し訳ありませんが、リクエストを説明することはできますか? –

+0

@ДенисМатафоновそれは動作しますか? –

+0

私はちょうどctrl + cを傾けることはできませんが、私はそれを修正する必要がありますが、私はそれを理解する必要があります:( 私は前に 'with'命令を使っていませんでした。 c)から、0) 'は –

0

試してみてください。

WITH x AS { 
    SELECT * FROM comments WHERE id >= :comment_id 
), 
y AS (
    SELECT * FROM comments 
    LIMIT 5 
) 
SELECT * FROM x 
WHERE 5 <= (SELECT count(*) FROM x) 
UNION ALL 
SELECT * FROM y 
WHERE 5 > (SELECT count(*) FROM x) 
関連する問題