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 :