从数学角度分析翻页功能的实现
时间:2007-09-04
来源:互联网
翻页功能是平时开发过程中一个常用的功能,好多时候网上给出的代码都没有说明原理,这不利于新人在学习PHP的过程中提高自己分析问题的能力。
本文从数学角度分析翻页功能的实现,如有不当之出还请各位高手指教。
一、分析
例如,我们有100条记录,每页显示20条,那么,我们需要5页来显示所有的记录(当然,不可能所有的情况都是整除的,下文对这情况有分析)。
页码 记录数 数据库实际记录(数据库中的第一条记录是用0表示 第2条记录用1表示)
1 1--20 0--19
2 21-40 20-39
3 41--60 40-59
4 61--80 60-79
5 81-100 80-99
用P代表页码 用C代表每页要显示的记录条数(这里的页码最大值=5 C=20) 用start代表启始记录
p=1 start=c*0=0
p=2 start=c*1=20
p=3 strat=c*2=40
p=4 start=c*3=60
p=5 start=c*4=80
以上我们可以知道,只要有变量P和常量C我们就可以计算出如何分页获取N条记录
二、实现
我们需要解决2个问题 1、如何确定页面最大值pmax 2、从数据库中读取数据
首先第一个问题:变量Pmax的确定(C是程序指定的常量,告诉程序每页显示多少条记录)
如果有100个记录 100/20=5页 那么101个记录怎么办?
我们用N表示所有数据条目:
if (n%20==0) //说明可以整除
Pmax=n/20;
else
pmax=p/20+1; //对于多出的条目 多加1页即可
第二个问题:如何从数据库读取数据
select * from date limit 0,20
limit 0,20 表示从0号数据开始(实际上就是第一条数据) 一共取出20条数据。 那么:
limit 20,20 表示从20号数据开始 取20条
limit 40,20
limit 60,20
limit 80,20
这样就能通过select 语句把符合条件的记录取出来
p=1 limit c*0,20
p=2 limit c*1,20
.
.
.
p=5 limit c*4,20
最后得出通用取得数据语句: select * from date limit $c*$p-1,c
三、显示控制
通过上面的例子,我们知道100个数据每页20条的话 最后会出现下面的翻页操作
<< < 1 2 3 4 5 > >>
其中
<< 和 >> 表示到最前页和最后页
< 和 > 表示前翻 后翻页
1 2 3 4 5表示具体页数
我们通过show.php这个页面来显示数据 这个页面需要参数:P (c是常量 可以通过用户指定)
那么,我们需要显示某1页面数据的时候就通过show.php?p=x 来给这个页面传递参数
1、首先是<< 和 >> 这个比较简单
<< 的时候 P=1
>> 的时候 :
if (n%20==0) //说明可以整除
P=n/20;
else
p=p/20+1; //对于多出的条目 多加1页即可(这个前面有解释,不再进行说明)
2、其次是< 和 > 上一页和下一页 这里需要有个容错:已经到第一页的时候再向前还是要到第一页,下一页同理
if (p==1)
上页P=1;
else
p=p-1;
然后连接指向show.php?p=$p
if (p==pmax)
下页P=pmax;
else
p=p+1;
然后连接指向show.php?p=$p
3、(1 2 3 4 5 )单个页面连接
这个很简单,给show.php传递?p=$p即可
这样,一个简单的翻页就基本完成了,当然,这里只是思路,没有给出具体代码,不过相信只要原理明白了,写出代码并不困难。
以上是通过对页码和数据之间的联系,大概给出了翻页的实现过程,希望在学习的时候多动脑,只有你没想到的,没有做不到的。
以上如有不妥之出还希望各位多提意见,我会及时更改,以免误导新人。
本文从数学角度分析翻页功能的实现,如有不当之出还请各位高手指教。
一、分析
例如,我们有100条记录,每页显示20条,那么,我们需要5页来显示所有的记录(当然,不可能所有的情况都是整除的,下文对这情况有分析)。
页码 记录数 数据库实际记录(数据库中的第一条记录是用0表示 第2条记录用1表示)
1 1--20 0--19
2 21-40 20-39
3 41--60 40-59
4 61--80 60-79
5 81-100 80-99
用P代表页码 用C代表每页要显示的记录条数(这里的页码最大值=5 C=20) 用start代表启始记录
p=1 start=c*0=0
p=2 start=c*1=20
p=3 strat=c*2=40
p=4 start=c*3=60
p=5 start=c*4=80
以上我们可以知道,只要有变量P和常量C我们就可以计算出如何分页获取N条记录
二、实现
我们需要解决2个问题 1、如何确定页面最大值pmax 2、从数据库中读取数据
首先第一个问题:变量Pmax的确定(C是程序指定的常量,告诉程序每页显示多少条记录)
如果有100个记录 100/20=5页 那么101个记录怎么办?
我们用N表示所有数据条目:
if (n%20==0) //说明可以整除
Pmax=n/20;
else
pmax=p/20+1; //对于多出的条目 多加1页即可
第二个问题:如何从数据库读取数据
select * from date limit 0,20
limit 0,20 表示从0号数据开始(实际上就是第一条数据) 一共取出20条数据。 那么:
limit 20,20 表示从20号数据开始 取20条
limit 40,20
limit 60,20
limit 80,20
这样就能通过select 语句把符合条件的记录取出来
p=1 limit c*0,20
p=2 limit c*1,20
.
.
.
p=5 limit c*4,20
最后得出通用取得数据语句: select * from date limit $c*$p-1,c
三、显示控制
通过上面的例子,我们知道100个数据每页20条的话 最后会出现下面的翻页操作
<< < 1 2 3 4 5 > >>
其中
<< 和 >> 表示到最前页和最后页
< 和 > 表示前翻 后翻页
1 2 3 4 5表示具体页数
我们通过show.php这个页面来显示数据 这个页面需要参数:P (c是常量 可以通过用户指定)
那么,我们需要显示某1页面数据的时候就通过show.php?p=x 来给这个页面传递参数
1、首先是<< 和 >> 这个比较简单
<< 的时候 P=1
>> 的时候 :
if (n%20==0) //说明可以整除
P=n/20;
else
p=p/20+1; //对于多出的条目 多加1页即可(这个前面有解释,不再进行说明)
2、其次是< 和 > 上一页和下一页 这里需要有个容错:已经到第一页的时候再向前还是要到第一页,下一页同理
if (p==1)
上页P=1;
else
p=p-1;
然后连接指向show.php?p=$p
if (p==pmax)
下页P=pmax;
else
p=p+1;
然后连接指向show.php?p=$p
3、(1 2 3 4 5 )单个页面连接
这个很简单,给show.php传递?p=$p即可
这样,一个简单的翻页就基本完成了,当然,这里只是思路,没有给出具体代码,不过相信只要原理明白了,写出代码并不困难。
以上是通过对页码和数据之间的联系,大概给出了翻页的实现过程,希望在学习的时候多动脑,只有你没想到的,没有做不到的。
以上如有不妥之出还希望各位多提意见,我会及时更改,以免误导新人。
作者: samsung 发布时间: 2007-09-04
:lol 支持了再看
作者: 逆雪寒 发布时间: 2007-09-04
打了好多字,分析很详细。
作者: hotbone 发布时间: 2007-09-04
很好 简洁明了 去用oracle试试

作者: 纯色理想 发布时间: 2007-09-06
彻底明白了分页,原来如此简单。
但是希望楼主能够介绍一下中间的分页页码是如何变化的,比如我一次只显示10个页面或者5个页面,而总共有100页的话,应该如何计算?
但是希望楼主能够介绍一下中间的分页页码是如何变化的,比如我一次只显示10个页面或者5个页面,而总共有100页的话,应该如何计算?
作者: yuanhui9 发布时间: 2007-09-28
支持一下
作者: jefsun 发布时间: 2007-09-28
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28