用PHP MySQL进行分页的详细说明(一)

分页显示详解

1、前言

分页显示是一种非经常见的浏览和显示大量数据的方法,属于web编程中最常处理的事件之一。对于web编程的老手来说,编写这种代码实在是和呼吸一样自然,但是对于初学者来说,经常对这个问题摸不着头绪,因此特地撰写此文对这个问题进行具体的讲解,力求让看完这篇文章的朋友在看完以后对于分页显示的原理和实现方法有所了解。本文适合初学者阅读,所有示例代码均使用php编写。

2、原理

所谓分页显示,也就是将数据库中的结果集人为的分成一段一段的来显示,这里需要两个初始的参数:

每页多少条记录($PageSize)?
当前是第几页($CurrentPageID)?

现在只要再给我一个结果集,我就可以显示某段特定的结果出来。
至于其他的参数,比如:上一页($PreviousPageID)、下一页($NextPageID)、总页数($numPages)等等,都可以根据前边这几个东西得到。
以mysql数据库为例,假如要从表内截取某段内容,sql语句可以用:select * from table limit offset, rows。看看下面一组sql语句,尝试一下发现其中的规率。

前10条记录:select * from table limit 0,10
第11至20条记录:select * from table limit 10,10
第21至30条记录:select * from table limit 20,10
……

这一组sql语句其实就是当$PageSize=10的时候取表内每一页数据的sql语句,我们可以总结出这样一个模板:

select * from table limit ($CurrentPageID - 1) * $PageSize, $PageSize

拿这个模板代入对应的值和上边那一组sql语句对照一下看看是不是那么回事。搞定了最重要的如何获取数据的问题以后,剩下的就仅仅是传递参数,构造合适的sql语句然后使用php从数据库内获取数据并显示了。以下我将用具体代码加以说明。

3、简单代码
请具体阅读以下代码,自己调试运行一次,最好把它修改一次,加上自己的功能,比如搜索等等。

<?php
// 建立数据库连接
$link = mysql_connect("localhost", "mysql_user", "mysql_password")
or die("Could not connect: " . mysql_error());
// 获取当前页数
if( isset($_GET['page']) ){
$page = intval( $_GET['page'] );
}
else{
$page = 1;
}
// 每页数量
$PageSize = 10;
// 获取总数据量
$sql = "select count(*) as amount from table";
$result = mysql_query($sql);
$row = mysql_fetch_row($result);
$amount = $row['amount'];
// 记算总共有多少页
if( $amount ){
if( $amount < $page_size ){ $page_count = 1; } //假如总数据量小于$PageSize,那么只有一页
if( $amount % $page_size ){ //取总数据量除以每页数的余数
$page_count = (int)($amount / $page_size) 1; //假如有余数,则页数等于总数据量除以每页数的结果取整再加一
}else{
$page_count = $amount / $page_size; //假如没有余数,则页数等于总数据量除以每页数的结果
}

时间: 2024-09-20 00:35:20

用PHP MySQL进行分页的详细说明(一)的相关文章

用PHP MySQL进行分页的详细说明(二)

function getDataLink() { if ( $this->numItems ) { global $db; $PageID = $this->CurrentPageID; $from = ($PageID - 1)*$this->PageSize; $count = $this->PageSize; $link = $db->limitQuery($this->sql, $from, $count); //使用Pear DB::limitQuery方法保

用 javabean 来实现 MySQL 的分页显示

mysql|分页|显示 用 javabean 来实现 MySQL 的分页显示 ●○●○●○●○●○●○●○●○●○●○●○●○●○●○○  作者:刘湛      日期:2000-02-04      jeru@163.net  ●●  http://www.cyberlabs.com/~jeru/                   ○○  欢迎访问爪哇人,获取更多资料                      ●●○●○●○●○●○●○●○●○●○●○●○●○●○●○ 今天写了个 MySQL

如何提高MySQL数据分页效率

  本节的数据编辑插教程给我们简单介绍如何提高MySQL数据分页效率,下面我们将会给出的这段代码是大数据量时提高分页的效率的测试代码. 如果你也需要设置MySQL数据提高分页效率,那么,就一起来看看代码段吧! --提高分页效率:实现分页时只读取显示数据,需要先在数据库创建数据库"TestForPaging" use TestForPaging go --创建表SomeData create table SomeData ( id int primary key, name varcha

Mysql字符串处理函数详细介绍、总结

 这篇文章主要介绍了Mysql字符串处理函数详细介绍.总结,需要的朋友可以参考下 一.简明总结 ASCII(char) 返回字符的ASCII码值 BIT_LENGTH(str) 返回字符串的比特长度 CONCAT(s1,s2-,sn)  将s1,s2-,sn连接成字符串 CONCAT_WS(sep,s1,s2-,sn) 将s1,s2-,sn连接成字符串,并用sep字符间隔 INSERT(str,x,y,instr) 将字符串str从第x位置开始,y个字符长的子串替换为字符串instr,返回结果

MySQL的分页查询语句limit

问题描述 MySQL的分页查询语句limit 假设,一个表中有一百条数据,我要查询第5页,每页10条数据,SQL语句怎么写?是用limit么? 不用涉及到Java语言,就SQL语句 解决方案 SELECT * FROM table LIMIT 51,10; 解决方案二: 查询第m页,每页n条数据 SELECT * FROM tablename LIMIT (m-1)*n,n 解决方案三: SELECT * FROM tablename LIMIT 5,10 解决方案四: SELECT * FRO

Mysql中分页查询两个方法比较

mysql中分页查询有两种方式, 一种是使用COUNT(*)的方式,具体代码如下 1 2 3 SELECT COUNT(*) FROM foo WHERE b = 1;   SELECT a FROM foo WHERE b = 1 LIMIT 100,10; 1    另外一种是使用SQL_CALC_FOUND_ROWS 1 2 SELECT SQL_CALC_FOUND_ROWS a FROM foo WHERE b = 1 LIMIT 100, 10; SELECT FOUND_ROWS(

Struts2.1.6+Spring2.5.6+Hibernate3.3.2+mysql整合+分页模板

Struts2.1.6+Spring2.5.6+Hibernate3.3.2+mysql整合+分页模板 博客分类:Java MySQLHibernateAOPSpringStruts  1.导入29个JAR包   JAR包名称 作用 Struts2.1.6(7个)   struts2-core-2.1.6.jar struts2开发的核心类库 freemarker-2.3.13.jar struts2的UI标签的模板使用freemarker编写 commons-logging-1.0.4.jar

急!关于mysql+jsp分页显示的问题,请哪位好心的大神帮忙看一下,很急!!谢谢!!

问题描述 急!关于mysql+jsp分页显示的问题,请哪位好心的大神帮忙看一下,很急!!谢谢!! 浏览器显示时总是重复出现当前页最后一条信息,是怎么回事啊? 这是jsp代码: <% int pageNum = 1; int pageSize=LunwenDao.PAGE_NUM; String paramPage = request.getParameter("page"); if (paramPage != null) { pageNum = Integer.parseInt(

java应用-oracle数据库和mysql数据库分页查询区别?

问题描述 oracle数据库和mysql数据库分页查询区别? oracle数据库和mysql数据库分页查询有什么区别?有何不同?具体,求教! 解决方案 oracle数据库分页用到rownum大小截取.mysql用limit.用法不一样 解决方案二: 语法上略有差别,但是大同小异,oracle借助行号函数来实现.http://blog.sina.com.cn/s/blog_8604ca230100vro9.html MySQL有limit函数http://qimo601.iteye.com/blo