2016-08-01 92 views
2

我想选择评论发布,老年人然后特别commentId,但我想要有至少反正5结果。Postgres选择'至少'项目

所以,如果有少于5条评论是sql:SELECT * FROM comments WHERE id >= :comment_id,我必须再作一个选择SELECT * FROM comments LIMIT 5

是否有可能在一个请求中获得相同的逻辑?

+0

你能以某种方式计数'COMMENT_ID + 5 comments' ID?然后你可以颠倒顺序,并得到5最后的评论:SELECT * FROM评论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它,我必须修改它来测试,但要修改我需要了解它:( 我没有使用'与'指令之前,无法弄清楚什么'极限最大(5 - (选择C从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)