2016-08-01 9 views
2

Ich möchte Kommentare auswählen, um zu posten, ältere dann bestimmte commentId, ABER ich möchte mindestens 5 Kommentare im Ergebnis sowieso haben.Postgres select 'mindest' Artikel

Also wenn es weniger als 5 Kommentare gibt, ist sql: SELECT * FROM comments WHERE id >= :comment_id, ich muss eine andere select SELECT * FROM comments LIMIT 5 machen.

Ist es möglich, die gleiche Logik in einer Anfrage zu erhalten?

+0

Kann man irgendwie ID zählen für 'comment_id + 5 comments'? Dann könnten Sie die Reihenfolge umkehren und 5 letzte Kommentare erhalten: SELECT * FROM Kommentare WHERE ID> _Comment_ID + 5 Kommentare_ ORDER BY ID DESC LIMIT 5' – Adam

Antwort

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

Sorry, aber könnten Sie bitte die Anfrage erklären? –

+0

@ Денисматафонов Funktioniert es? –

+0

Ich kann nicht nur ctrl + c es, ich muss es ändern, um zu testen, aber zu ändern, ich muss es verstehen :( Ich habe '' 'Anweisung vorher nicht verwendet und kann nicht herausfinden, was' Grenze größte (5 - (wählen c aus c), 0) ist –

0

Versuchen:

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) 
Verwandte Themen