J'ai le tableau suivant:
CREATE TABLE post (
id bigint primary key,
thread_id bigint,
is_notice boolean,
title text,
content text
)
J'affiche la liste en utilisant la requête suivante:
SELECT * FROM post ORDER BY is_notice desc, thread_id desc, id
Puis, étant donné le poste sélectionné par id (c'est-à-dire SELECT * FROM post where id=3
), comment récupérer les messages suivants et précédents?
L'utilisation de PostgreSQL Window Functions , en particulier LAG
et LEAD
, devrait être en mesure de vous montrer les entrées précédentes et suivantes de votre table.
select *
from (
select id, thread_id, is_notice, title, content,
lag(id) over (order by is_notice desc, thread_id desc, id asc) as prev,
lead(id) over (order by is_notice desc, thread_id desc, id asc) as next
from post
) x
where 3 IN (id, prev, next);
Une démo peut être trouvée ici: http://sqlfiddle.com/#!15/9fd7a/8