+ -
当前位置:首页 → 问答吧 → 从数学角度分析翻页功能的实现

从数学角度分析翻页功能的实现

时间: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即可


这样,一个简单的翻页就基本完成了,当然,这里只是思路,没有给出具体代码,不过相信只要原理明白了,写出代码并不困难。


以上是通过对页码和数据之间的联系,大概给出了翻页的实现过程,希望在学习的时候多动脑,只有你没想到的,没有做不到的。

以上如有不妥之出还希望各位多提意见,我会及时更改,以免误导新人。

作者: samsung   发布时间: 2007-09-04

:lol 支持了再看

作者: 逆雪寒   发布时间: 2007-09-04

打了好多字,分析很详细。

作者: hotbone   发布时间: 2007-09-04

很好 简洁明了 去用oracle试试

作者: 纯色理想   发布时间: 2007-09-06

彻底明白了分页,原来如此简单。
但是希望楼主能够介绍一下中间的分页页码是如何变化的,比如我一次只显示10个页面或者5个页面,而总共有100页的话,应该如何计算?

作者: yuanhui9   发布时间: 2007-09-28

支持一下

作者: jefsun   发布时间: 2007-09-28

热门下载

更多