【问题标题】:Pagination variable分页变量
【发布时间】:2013-05-29 23:19:07
【问题描述】:

我有一个分页码。

$nextpage = $pageno+1;

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

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

那么,我怎样才能告诉它找到下一行而不是 +1 分页变量?

谢谢

编辑:

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

【问题讨论】:

  • 在你的 sql 中使用 LIMIT 子句,它可以(是...)与你的 ID 号完全无关。

标签: php sql pagination


【解决方案1】:

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

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

示例:

SELECT * FROM post WHERE active = 1 ORDER BY id LIMIT 0, 10

【讨论】:

    【解决方案2】:

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

    对于页面,我们只使用查询字符串。在这个例子中,让我们使用 $_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");
    

    【讨论】:

    • 我已经更改了代码,它将所有行显示为页码。因此,包含 80 行的相册显示页面:1 - 80。问题在于您有 $i 变量,表示页码。原来的问题仍然存在。它不会调用下一个现有行,只是假定 id 是 1-80。
    猜你喜欢
    • 1970-01-01
    • 2014-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-06
    • 2014-09-30
    • 2021-02-24
    相关资源
    最近更新 更多