我正在编写一个我正在编写的Web服务中的分页功能,但是我缺乏数学洞察力现在正在扼杀我。
我有几个键:totalItems
,currentItems
,currentPage
,totalPages
,还有一些指向first
,last
的链接, previous
和next
。
此时,我正在进行以下计算:
totalItems
:表格中的行数currentItems
:limit
参数currentPage
:start
参数除以limit
参数totalPages
:表格中的行数除以limit
。 (圆了,8.1页= 9页)我认为这些计算是正确的,我我正在努力解决的问题如下:
first
:start
参数为1,其中limit
来自HTTP请求last
:应该是最后一页的第一项,如何正确计算?previous
:应该是上一页的第一项,我该怎么做?next
:应该是下一页的第一项,我该怎么做?我想问的是:我的计算是否正确?我如何解决last
,previous
和next
的三个问题?
答案 0 :(得分:16)
如果您使用mysql,那么
LIMIT offset, items_per_page
要计算偏移量,您可以使用
$offset = ($page - 1) * $items_per_page;
然后相应地替换$page
。
最后
$last_offset = ($totalPages - 1) * $items_per_page;
上
$previous_offset = (($currentPage - 1) - 1) * $items_per_page;
下一步
$next_offset = (($currentPage + 1) - 1) * $items_per_page;
编辑:
if ($previous_offset > 0) echo '<a href="?start='.$previous_offset.'&limit='.$items_per_page.'>prev</a>';
if ($next_offset <= $totalPages * $items_per_page) echo '<a href="?start='.$next_offset.'&limit='.$items_per_page.'">prev</a>';
答案 1 :(得分:2)
如果限制指的是每页的项目数,则:
currentItems: same as limit
currentPage: floor(start / limit)
totalPages: ceil(totalItems / limit)
last: totalPages * limit
previous: (currentPage-1 // Should be greater or equal to 0) * limit
next: (currentPage+1 // Should be less or equal than totalPages) * limit
我只是一个近似......
答案 2 :(得分:0)
在这里,我使用下面的代码并且工作正常。
var list = [[0, 0], [0, 1]]
list.includes([0, 0])
答案 3 :(得分:0)
我浏览了许多文章,并创建了非常简单的分页公式
offset = (limit * page no) - limit
例如,如果限制为5
LIMIT 5
page 1
offset : no (No need to use offset)
(5 - 1) - 5
select * from users limit 5
page 2
offset : 5
(5 * 2) - 5
select * from users limit 5 offset 5
page 3
offset 10
(5 * 3) - 5
select * from users limit 5 offset 10
page 4
offset 15
(5 * 4) - 5
select * from users limit 5 offset 15
从表名限制5的偏移值中选择*(根据公式计算)
这对我有用