分页变量

时间:2013-05-28 21:38:03

标签: php sql pagination

我有一个分页代码。

$nextpage = $pageno+1;

这将为下一页创建一个html链接。不幸的是$pageno变量,例如350就是+1更改不起作用。那也是id 351,数据库中的行并不总是连续的数字,它们有间隙。

12467等(这是因为脚本分配ID的方式。

因此,我不应该使用+1分页变量,而是如何告诉它找到下一行呢?

由于

编辑:

我在这个帖子中找到了解决方案:mysql get previous and next record id

2 个答案:

答案 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");