我有一个分页代码。
$nextpage = $pageno+1;
这将为下一页创建一个html链接。不幸的是$pageno
变量,例如350就是+1
更改不起作用。那也是id 351
,数据库中的行并不总是连续的数字,它们有间隙。
1
,2
,4
,6
,7
等(这是因为脚本分配ID的方式。
因此,我不应该使用+1
分页变量,而是如何告诉它找到下一行呢?
由于
编辑:
我在这个帖子中找到了解决方案:mysql get previous and next record id
答案 0 :(得分:0)
数据库表的主键应该是auto_incriment。但是删除行仍然会在ID中留下漏洞。
正如@jeroen所提到的,你不应该按列表的ID选择行。只需使用LIMIT。
示例:
SELECT * FROM post WHERE active = 1 ORDER BY id LIMIT 0, 10
答案 1 :(得分:0)
这是一个非常简单的例子:
对于页面,我们只使用查询字符串。在这个例子中,让我们使用$ _GET ['page']初始化$ page变量。如果未设置GET var,则默认为第1页。
$page = isset($_GET['page']) ? (int) $_GET['page'] : 1;
现在,我们要弄清楚查询中有多少页面。为此,我们可以使用COUNT()SQL函数,然后将返回的数字除以我们想要的每页结果数量。
$pages = implode(mysql_fetch_assoc(mysql_query("SELECT COUNT(key) FROM table")));
$pages = ceil($pages / 6);
现在,因为我们可能设置了其他GET变量,所以我们希望保留查询字符串。为此,我们只将所有当前变量(当然除第一页之外)组合成一个字符串。
$querystring = "";
foreach ($_GET as $key => $value) {
if ($key != "page") $querystring .= "$key=$value&";
}
然后,我们可以遍历页面,并回显出它们的链接。使用条件或三元运算符,我们还可以为当前页面分配不同的类。
echo "Pages: ";
for ($i = 1; $i <= $pages; $i++) {
echo "<a " . ($i == $page ? "class=\"selected\" " : "");
echo "href=\"?{$querystring}page=$i";
echo "\">$i</a> ";
}
然后,要仅显示与当前页面相关的结果,我们可以使用LIMIT SQL子句,或者在本例中为LIMIT(($ page - 1)* 6),6(因为我们每页有6个结果,第一页需要从第0个记录中查询。)
$result = mysql_query("SELECT * FROM table LIMIT " . (($page - 1) * 6) . ", 6");