Ich habe folgende Tabelle:
CREATE TABLE post (
id bigint primary key,
thread_id bigint,
is_notice boolean,
title text,
content text
)
Ich zeige die Liste mit der folgenden Abfrage an:
SELECT * FROM post ORDER BY is_notice desc, thread_id desc, id
SELECT * FROM post where id=3
Wie kann ich dann angesichts des durch id (dh ) ausgewählten Beitrags den nächsten und den vorherigen Beitrag abrufen?
postgresql
select
Alice
quelle
quelle
WHERE
Klausel haben, geben Sie alle Zeilen aus der Tabelle zurück. Es gibt keine nächsten oder vorherigen. Könnten Sie es etwas besser erklären?Antworten:
Wenn Sie die Fensterfunktionen von PostgreSQL verwenden , sollten Sie speziell
LAG
undLEAD
in der Lage sein, die vorherigen und nächsten Einträge in Ihrer Tabelle anzuzeigen.Eine Demo finden Sie hier: http://sqlfiddle.com/#!15/9fd7a/8
quelle
ORDER BY
Inneren gebenOVER (...)
?ORDER BY
in derOVER()
Klausel verpasst . Ich habe entsprechend bearbeitet. Vielen Dank!3 IN (id, prev, next)
in das3 = ANY('{id, prev, next}')
intern umgeschrieben wird . EXPLAIN ANALYZE enthüllt es.3 in (id, prev, next)
bläst mich um, ich wünschte ich wüsste das schon mal :)