Help us understand the problem. What is going on with this article?

ページングで使う開始/終了インデックスの計算。ついでに総ページ数も

検索結果を1ページで全て表示させず、ページングしたい時
sqlにしろ、リストを絞るにしろ開始インデックスが必要になる。

実装の度に思い出すのが面倒な為、備忘録として記事にしておく

開始インデックス

開始インデックスを求めると

開始インデックス = (ページ番号 - 1) * 1ページ辺りの表示件数

になる。
※ページ番号は1始まり、インデックスは0始まり

終了インデックス

またsqlの場合は、limit 件数 offset 開始インデックス+1 となるので、気にする必要はないが、
終了インデックスもあると何かと便利だったりする(x ~ y/n件中みたいな時とか)

ので考えると

終了インデックス = min(ページ番号 * 1ページ辺りの表示件数 - 1,リストのサイズ - 1)

または

終了インデックス = min(開始インデックス + 1ページ辺りの表示件数 - 1,リストのサイズ - 1) 

※開始インデックスの式を利用する場合

になる。

総ページ数

ついでに、総データ件数から総ページ数を求めると

総ページ数 = ceil(リストのサイズ / 1ページ辺りの表示件数)

になる。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした