I am working on a pagination feature in a web service I am writing, but my lack of math insight is killing me now.

I have a couple of keys: totalItems, currentItems, currentPage, totalPages, but also a couple of links to first, last, previous and next.

At this moment, I am doing the following calculations:

totalItems: number of rows in the table

currentItems: limit parameter from HTTP request

currentPage: start parameter divided by limit parameter

totalPages: number of rows in the table divided by limit. (Rounded up, 8.1 page = 9 pages)

I assume those calculations to be correct, what I am struggling with is the following:

first: start parameter is 1 with limit from the HTTP request

last: should be the first item of the last page, how do I calculate this correctly?

previous: should be the first item of the previous page, how do I do this?

next: should be the first item of the next page, how do I do this?

What I would like to ask, is: are my calculations correct? And how do I tackle the three problems with last, previous and next?

解决方案

If you work with mysql its

LIMIT offset, items_per_page

To calculate the offset u can use

$offset = ($page - 1) * $items_per_page;

Then replace the $page accordingly.

Last

$last_offset = ($totalPages - 1) * $items_per_page;

Previous

$previous_offset = (($currentPage - 1) - 1) * $items_per_page;

Next

$next_offset = (($currentPage + 1) - 1) * $items_per_page;

EDIT :

if ($previous_offset > 0) echo 'prev';

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐