我想选择评论发布,老年人然后特别commentId,但我想要有至少反正5结果。Postgres选择'至少'项目
所以,如果有少于5条评论是sql:SELECT * FROM comments WHERE id >= :comment_id
,我必须再作一个选择SELECT * FROM comments LIMIT 5
。
是否有可能在一个请求中获得相同的逻辑?
我想选择评论发布,老年人然后特别commentId,但我想要有至少反正5结果。Postgres选择'至少'项目
所以,如果有少于5条评论是sql:SELECT * FROM comments WHERE id >= :comment_id
,我必须再作一个选择SELECT * FROM comments LIMIT 5
。
是否有可能在一个请求中获得相同的逻辑?
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它,我必须修改它来测试,但要修改我需要了解它:( 我没有使用'与'指令之前,无法弄清楚什么'极限最大(5 - (选择C从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?然后你可以颠倒顺序,并得到5最后的评论:SELECT * FROM评论WHERE id> _comment_id + 5 comments_ ORDER BY id DESC LIMIT 5' – Adam