postgresqlで、いくつかのページ付けに使用される開始レコードIDに基づいてレコードの前と次のX個のレコードを取得できるクエリを使用しようとしています。 1つだけ次の、または前の取得はそれほど難しいことではありませんが、それは私が必要なものではありません。SQL - 次のXレコードと前のXレコードを取得する
私は近くにあるクエリをいくつか見つけましたが、これらのタイプの複雑なクエリを実行するためにPostgreSQLクエリについては十分にわかりません。
この質問は私が試してみたところ、IDの前と次の項目と、すべてを返しているようです。レコード。
しかし、それはWHERE
句のようなIDを提供する開始点を与えることができ、存在する場合には10個の次のレコードと10個の次のレコードだけを得ることができる必要があります。これはsqlだけでも可能ですか?
SELECT
m.med_id AS id,
coalesce(
LEAD(m.med_id) OVER (ORDER BY m.med_id DESC),
(select med.med_id from media as med order by med.med_id desc limit 1)
) AS nextitemid,
coalesce(
LAG(m.med_id) OVER (ORDER BY m.med_id DESC),
(select med.med_id from media as med order by med.med_id asc limit 1)
) AS previtemid
FROM media m
WHERE m.post_type = 1
ORDER BY m.med_id DESC LIMIT 20;
これは、これを実現する任意のタイプのSQLソリューションです。
希望の出力私は、クエリで提供されたID開始点として50を与えられた100個のアイテムの例によると思います。
|previtemids|nextitemids|
49 51
48 52
47 53
46 54
45 55
44 56
43 57
42 58
41 59
40 60
私は近づいてきましたが、1つのクエリで取得できませんでした。私のシナリオに近い回答は、一般的な回答よりも役立ちます。そこに例えば、10前の行が存在しない場合は、しかし:
前のレコードを10個、次のレコードを10個、レコードごとに別々の行にしますか? – Alex
Hmm良い質問@Alex PHPから配列に読み込む予定です。おそらく列が簡単かもしれませんか? –
希望の出力例を投稿してください。 – Alex