【问题标题】:MySQL PHP PaginationMySQL PHP 分页
【发布时间】:2011-04-14 14:25:37
【问题描述】:

是否可以在不获取表格所有元素的情况下创建分页? 但是对于像 /1 /666 这样的 GET 页面......

【问题讨论】:

标签: php mysql pagination


【解决方案1】:

您可以使用LIMIT 对结果集进行分页。

SELECT * FROM comments WHERE post_id = 1 LIMIT 5, 10

其中 LIMIT 5 表示 5 cmets,10 是偏移量。你也可以使用更长的语法:

... LIMIT 5 OFFSET 10

【讨论】:

    【解决方案2】:

    是的,使用 mySQL 的 LIMIT 子句。大多数分页教程都为如何使用它提供了很好的示例。

    有关更多链接和信息,请参阅这些问题:

    【讨论】:

      【解决方案3】:

      它通常涉及发出两个查询:一个是获取结果集的“切片”,另一个是获取记录总数。从那里,您可以计算出您有多少页并相应地构建分页。

      一个简单的例子:

      <?php
      $where = ""; // your WHERE clause would go in here
      $batch = 10; // how many results to show at any one time
      $page  = (intval($_GET['page']) > 0) ? intval($_GET['page']) : 1;
      $start = $page-1/$batch;
      $pages = ceil($total/$batch);
      
      $sql = "SELECT COUNT(*) AS total FROM tbl $where";
      $res = mysql_query($sql);
      $row = mysql_fetch_assoc($res);
      $total = $row['total'];
      
      // start pagination
      $paging = '<p class="paging">Pages:';
      for ($i=1; $i <= $pages; $i++) {
          if ($i==$page) {
              $paging.= sprintf(' <span class="current">%d</a>', $i);
          } else {
              $paging.= sprintf(' <a href="?page=%1$d">%1$d</a>', $i);
          }
      }
      $paging.= sprintf' (%d total; showing %d to %d)', $total, $start+1, min($total, $start+$batch));
      

      然后查看你的分页链接:

      ...
      // loop over result set here
      
      // render pagination links
      echo $paging;
      

      我希望这会有所帮助。

      【讨论】:

      猜你喜欢
      • 2011-02-06
      • 2013-05-25
      • 2018-01-12
      • 2011-03-06
      • 1970-01-01
      • 1970-01-01
      • 2011-12-03
      • 1970-01-01
      • 2011-08-20
      相关资源
      最近更新 更多