現在、PHPとSQLiteを使用して左右に2つの画像を表示するページがあります。
特定の画像IDを使用してクエリを実行します
- その画像のファイル
- 次の画像のファイル
- 次の次の画像へのリンク
- 前の前の画像へのリンク
- 前の画像へのリンク (前の画像が存在しない場合)
オフセットを使用してみましたが、オフセットが範囲外の場合、クエリ全体が失敗するようです。それを防止またはキャッチする方法はありますか?
select id, file, findex
from vfb
where findex > (select findex from vfb where findex<4 and bookcode='BEFB'
order by findex desc limit 1 offset 1)
and findex < (select findex from vfb where findex>4 and bookcode='BEFB'
order by findex asc limit 1 offset 1)
and bookcode='BEFB'
order by findex asc;
今、私はselect(select a where x<1) as a1, (select a where x=1) as b1, (select b where x=1) as c1
構造を使用していますが、これは非常に醜く、( ) のようなクエリからさらに情報が必要であることがわかりましたselect a where x<1
。
では、クエリを短縮したり、次のようなものを使用したりする方法はあります(select a,b where x<1) as a1,b2
か?
私のテーブルはId|bookcode|page|findex(fakepage)|file|title|stuff|morestuff
完全な醜い選択:
select
(select findex from vfb where bookcode='BOOK' and findex<
(select findex from vfb where bookcode='BOOK' and findex<100 order by findex desc limit 1) order by findex desc limit 1) as p2,
(select findex from vfb where bookcode='BOOK' and findex<100 order by findex desc limit 1) as p1,
(select file from vfb where bookcode='BOOK' and findex==100) as f1,
(select file from vfb where bookcode='BOOK' and findex>100 order by findex asc limit 1) as f2,
(select findex from vfb where bookcode='BOOK' and findex>
(select findex from vfb where bookcode='BOOK' and findex>100 order by findex asc limit 1) order by findex asc limit 1) as n2;
結果:
98|99|BOOK_Page_104_Image_0001.png|BOOK_Page_105_Image_0001.png|102
オフセットを使用してみましたが、オフセットが範囲外の場合、クエリ全体が失敗するようです。それを防止またはキャッチする方法はありますか?