1

对不起,我是PHP的新手。现在想学习如何用PHP写一个分页效果。我知道网上有很多这方面的教程。我搜索了它并参考了它们。但是,当我自己尝试并且没有参考其他资源时,我仍然不知道如何用PHP编写分页效果。

现在,我想知道用 PHP 编写分页的基本和重要的事情是什么。如果有人可以给我更多的细节,谢谢。

4

2 回答 2

4

在这个例子中,我将使用 MySQL,因为它是一个与 PHP 一起使用的流行数据库。一般原则适用于其他数据库,但使用 SQL 实现结果的精确方式不同。

分页的本质是你有一个数字记录,比如 105,你只想一次显示一个更小、更易于管理的记录,比如 10 个。为此,您需要知道如何找出记录的总数,并且需要知道如何仅选择记录的子集。

首先,找出你有多少条记录。为此,您使用 COUNT(*) 来计算表中的记录。如果您的表称为用户:

SELECT COUNT(*) FROM Users;

由于我们说表中有 105 条记录,所以这将返回结果105。我们说每页有 10 条记录,所以计算一下总共有多少页:105 / 10 = 10.5;向上取整到 11,因为第 10 页之后的额外记录需要自己的页面。因此,总共有 11 页。您的网页将显示控件,使用户能够选择从 1 到 11 的页面。

您一次只获取一页,而不是获取所有记录。在 MySQL 中,您通常使用LIMIT关键字来执行此操作;这允许您选择一系列记录。LIMIT语法如下:LIMIT $SKIP, $COUNT,其中$SKIP是要跳过的结果集中的记录数,$COUNT是要返回的数。(实际上,你会得到记录 $COUNT,以防可用的更少。)

用户已请求第 6 页。这意味着我需要跳过 5 页才能显示结果。每页有 10 条记录,这意味着我将跳过 5 * 10 条记录,即 50 条记录。换句话说,$SKIP = ($PAGE_NUMBER - 1) * $PAGE_SIZE. 您的查询将如下所示:

SELECT User_ID, UserName, City, State from Users LIMIT 50, 10;

这为您提供了表的 51-60 条记录。

请参阅文档以了解有关 LIMIT 工作原理的更多信息:

http://dev.mysql.com/doc/refman/5.5/en/select.html

现在您有了单页记录。但是,记录的编号取决于它们的顺序。上面的查询会给你不可预知的结果,因为排序是未定义的。(数据库可以按照它选择的任何顺序返回记录,除非您命令它使用某种顺序。)因此,要进行分页,您需要定义记录的顺序。使用 ORDER BY 定义排序:

SELECT User_ID, UserName, City, State from Users ORDER BY UserName LIMIT 50, 10;

这使您可以显示不同的结果页面,并且始终知道当您显示第 6 页时,它包含第 5 页上的记录之后和第 7 页上的记录之前的记录。

(如果您的记录没有任何自然顺序,则必须定义一个任意顺序以使其正常工作。)

我在这个答案中完全避免提到 PHP,因为我认为没有必要这样做来解释分页。分页完全是处理数据的问题。如果您理解这一点,我认为您可以阅读这些教程,它们对您来说很有意义,然后您就可以了解如何编写 PHP 来做到这一点。

于 2012-08-31T02:50:51.060 回答
1
  1. 获取页码
  2. 知道每页要显示多少项目。
  3. 使用 mysql 命令“LIMIT”,获取偏移量并选择所需的行数。

想使用类?http://net.tutsplus.com/tutorials/php/how-to-paginate-data-with-php/

或者只是一个简单的脚本来修改?http://pastebin.com/J8nTk1q5

如果您是 PHP 新手,那么您需要了解更多 PHP 或冒着将来混淆的风险。

于 2012-08-31T02:50:31.210 回答