【问题标题】:Paging MySQL results with PHP使用 PHP 分页 MySQL 结果
【发布时间】:2011-06-14 20:21:42
【问题描述】:

如果输出很长,您如何将 MySQL 结果拆分为“下一个”和“上一个”?

$data = mysql_query("SELECT * FROM table WHERE ... AND ...")  
  or die(mysql_error());

while($info = mysql_fetch_array( $data ))
{
  echo $info['value'];
}

从 1 到 10 的值会在哪里列出,然后转到下一个?第一页可以使用LIMIT 10 完成,但我将如何执行以下操作?

【问题讨论】:

    标签: php mysql pagination


    【解决方案1】:
    SELECT * FROM table WHERE ... AND ... LIMIT 10 OFFSET 10
    

    我更喜欢使用 OFFSET 字,因为它更易读。

    还要记住,偏移量是基于 0 的(返回的第一行的偏移量是 0,而不是 1)。所以 LIMIT 10 OFFSET 10 将返回第 10 到 19 行。

    【讨论】:

    • MySQL 是否支持 OFFSET?比 IMO 的 LIMIT x,y 语法要好得多。
    • 那么我最好选择OFFSET吗?
    • 确实如此(从第 5 版开始)。 dev.mysql.com/doc/refman/5.0/en/select.html Alfie 没有功能上的区别,只是让代码对其他人更具可读性,但如果你在其中有 ThiefMaster 所写的变量名,那也能说明哪个是哪个。
    • 更简单,使用jquery load()函数,可以通过php调用offset $_GET['offset'];
    • 刚试了一下,在主页上查询每10个回显的行'1','2',... onclick事件$('#DIV').load(file.php?id= '+ id +'&offset='+ offset);谢谢你,也谢谢ThiefMaster!
    【解决方案2】:

    您可以在 LIMIT 子句中指定偏移量:

    LIMIT 0, 10
    LIMIT 10, 10
    LIMIT 20, 10
    ...
    

    因此,在构建 LIMIT 子句时,您的代码应如下所示:

    $offset = ($current_page - 1) * $items_per_page;
    $sql = "[...] LIMIT $offset, $items_per_page";
    

    当然,您必须确保$current_page>= 1。但这很容易做到:

    $current_page = empty($_GET['current_page']) ? 1 : max(1, (int)$_GET['current_page']);
    

    【讨论】:

    • 谢谢你,这正是我想要的。
    猜你喜欢
    • 2012-05-19
    • 2012-09-05
    • 1970-01-01
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多