私は投稿するコメントを選択したいと思っていますが、特定のcommentIdの先輩ですが、以上少なくとも 5コメントが結果に残っています。Postgresは「少なくとも」の項目を選択します
したがって、5つ以下のコメントがある場合は、sql:SELECT * FROM comments WHERE id >= :comment_id
です。もう1つ選択する必要があります。SELECT * FROM comments LIMIT 5
。
1つのリクエストで同じロジックを得ることは可能ですか?
私は投稿するコメントを選択したいと思っていますが、特定のcommentIdの先輩ですが、以上少なくとも 5コメントが結果に残っています。Postgresは「少なくとも」の項目を選択します
したがって、5つ以下のコメントがある場合は、sql:SELECT * FROM comments WHERE id >= :comment_id
です。もう1つ選択する必要があります。SELECT * FROM comments LIMIT 5
。
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)
)
;
申し訳ありませんが、リクエストを説明することはできますか? –
@ДенисМатафоновそれは動作しますか? –
私はちょうどctrl + cを傾けることはできませんが、私はそれを修正する必要がありますが、私はそれを理解する必要があります:( 私は前に 'with'命令を使っていませんでした。 c)から、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)
あなたは何とか 'comment_id + 5 comments'のIDをカウントすることはできますか? SELECT * FROM comments WHERE id> _comment_id + 5 comments_ ORDER BY id DESC LIMIT 5 ' – Adam