分页显示是一种非常常见的浏览和显示大量数据的方法,属于web编程中最常处理的事件之一。对于web编程的老手来说,编写这种代码实在是和呼吸一样自然,但是对于初学者来说,常常对这个问题摸不着头绪,因此特地撰写此文对这个问题进行详细的讲解。
每页多少条记录($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从数据库内获取数据并显示了。
二、分页代码说明:
一、分页原理:
所谓分页显示,也就是将数据库中的结果集人为的分成一段一段的来显示,这里需要两个初始的参数:每页多少条记录($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从数据库内获取数据并显示了。
二、分页代码说明:
class PageController {
private $page; //当前页
private $pagenum; //总页数
// <a href="#" class="nobr">共33页</a>
public function __construct($page, $pagenum,$url) {
$this->page = $page;
$this->pagenum = $pagenum;
$this->url=$url;
}
//首页
private function first() {
if ($this->page == 1) {
@$html.='<a href="#" class="nobr">1</a>';
} else {
@$html.='<a href="' . U($this->url, array('page' => $this->page)) . '" class="nobr" >' . $this->page . '</a>';
}
return $html;
}
//上一页
private function prev() {
$html = '<div class="page">';
if ($this->page == 2) {
@$html.='<a href="' . U($this->url) . '">上一页</a>';
} else {
@$html.='<a href="' . U($this->url, array('page' => $this->page - 1)) . '">上一页</a>';
}
return $html;
}
//下一页
private function next() {
if ($this->page == $this->pagenum) {
@$html.='<a href="' . U($this->url, array('page' =>$this->pagenum)) . '" class="pink">下一页</a>';
} else {
@$html.='<a href="' . U($this->url, array('page' => $this->page + 1)) . '" class="pink">下一页</a>';
}
return $html;
}
//尾页
private function last() {
if ($this->page == $this->pagenum) {
@$html.='<a class="nobr">共' . $this->pagenum . '页</a> <a class="input"><input type="text" class="page" name="page"></a><a id="get_page" class="pink">跳转</a> </div>';
} else {
@$html.='<a class="nobr">共' . $this->pagenum . '页</a> <a class="input"><input type="text" class="page" name="page"></a><a id="get_page" class="pink">跳转</a> </div>';
}
return $html;
}
public function pagelist() {
return array('prev' => $this->prev(), 'first' => $this->first(), 'next' => $this->next(), 'last' => $this->last());
}
}