我正在查看一些遗留代码,并希望在一些方面提供一些帮助。
我所有的问题都与分页有关。
首先,在以下查询中,我们计算总页数。 $itemsperpage=40 here
。
$rs0=mysqli_fetch_array(mysqli_query($dbh,"select floor(count(1)/$itemsperpage)+1 as pages from scx_media where scx_media.mediaid in (select mediaid from animated_gifs where status>0)"));
我们为什么要这个,然后添加1?
其次,
在这段代码中,我们创建了start变量(用于sql查询)。
$page=(int)$_GET['page'];
$pages=$rs0[pages];
if($page>$pages)$page=$pages;
$start=($page-1)*$itemsperpage;
为什么我们从页面中减1?因为我们从0开始所以我们必须减去1?
最后,
假设我们有40 items
和perpage item count is 40 as well
。使用此配置we'd have a second page with no data
,因为它将在第一页上显示满足每页要求的40个项目,然后根据页面计算我们将有第二页但没有记录。 如何解决该问题?
答案 0 :(得分:1)
假设您有40个结果,每页显示40个项目。 你想要1页40结果。
让我们“玩”代码。您的用户询问page.phtml?page = 1:
$page=(int)$_GET['page']; # $page = 1
$pages=$rs0[pages]; # $pages = 1
if($page>$pages)$page=$pages; # 1 > 1, no so no change
$start=($page-1)*$itemsperpage; # $start = (1 - 1) * 10 = 0
因此,第1页上显示的第一项将为0。 第1页:从结果0开始。显示40。 并且您不应该向用户提供“下一页”!
您的用户询问page.phtml?page = 2
$page=(int)$_GET['page']; # $page = 2
$pages=$rs0[pages]; # $pages = 1
if($page>$pages)$page=$pages; # 2 > 1, yes so $page = 1
$start=($page-1)*$itemsperpage; # $start = (1 - 1) * 40 = 0
因此,如果$ page大于$ pages,则强制用户返回?page = 1并且$ start再次返回结果no.0。
事实上看起来不错......
对于SQL:
select floor(count(1)/$itemsperpage)+1 as pages ...
应该是:
select ceil(count(1)/$itemsperpage) as pages ...
答案 1 :(得分:0)
我正在使用2个网址变量[{1}}和$_GET['page']
例如$_GET['pageSize']
/users?page=5&pageSize=30
这使得分页更容易比使MySql计算页面大小并执行应该在应用程序层完成的更多内容。但是,为了快速解决当项目数等于每页项目数时获取额外空白页面的问题,您可以向SQL语句添加额外条件,以便仅在该部门有余数时添加1
更改此
$query ="
SELECT SQL_CALC_FOUND_ROWS *
FROM
user
LIMIT ?
OFFSET ?
";
$variables = [$_GET['pageSize'],$_GET['page']];
// don't forget to sanitize the pageSize , for example allow only (15,30,50)
//then get the total found rows right after
$query = "SELECT FOUND_ROWS()";
到这个
select floor(count(1)/$itemsperpage)+1
但正如我所说,我不会使用数据库服务器来完成计算所需页码的工作。这是一个应用层工作。我甚至在客户端这样做。
<小时/> 编辑: 您可以像这样
计算应用层(PHP)的
select (CASE WHEN floor(count(1)%$itemsperpage) THEN floor(count(1)/$itemsperpage)+1 ELSE floor(count(1)/$itemsperpage) END)
$pagesNumber