0

我有一个分页代码。

$nextpage = $pageno+1;

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

1, 2, 4,67(这是因为脚本分配 id 的方式。

所以+1我怎么能告诉它找到下一行,而不是有一个分页变量呢?

谢谢

编辑:

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

4

2 回答 2

0

数据库表的主键应该是 auto_incriment。但是删除行仍然会在 ID 中留下漏洞。

正如@jeroen 提到的,您不应该按 ID 为列表选择行。只需使用限制。

例子:

SELECT * FROM post WHERE active = 1 ORDER BY id LIMIT 0, 10
于 2013-05-28T22:05:29.917 回答
0

这是一个非常简单的例子:

对于页面,我们只需使用查询字符串。在这个例子中,让我们使用 $_GET['page'] 来初始化 $page 变量。如果未设置 GET 变量,我们默认为第 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");
于 2013-05-28T22:05:38.713 回答