PHP + MYSQL 对数据库内数据实现分页显示

3 篇文章 0 订阅

Title : PHP + MYSQL 对数据库内数据实现分页显示
Author : Stangly Wrong


  很多PHP的初学者,都对于WEB页面的分页显示比较困惑,其实分页显示的原理非常简单,今天又有人在QQ上问我这个问题。由于顺手写了这一小记,便于众兄弟朋友翻阅。

问题:我的数据库结构如下

Create database book_list (
 id int unsigned not null auto_increment,
 name varchar(50) not null,
 author varchar(50) not null,
 primary key (id)
)

id: 为书籍的ID言标识,主键
name:书籍名称
author:书书籍作者

本例数据表的比较简单,主要是方便于解释。

现在我们需要这样分页显示这些数据,要求:数据表中已经有 11 条记录,每页显示数据为 5 条,分多页显示。

根据要求现在分析一下,

第一页显示 0 - 4 条记录
第二页显示 5 - 9 条记录
第三页显示 10 - 14 条记录

实际上可以得出如下结论,每次都需要从 $posion 条显示,显示数为 $pageSize ,在mysql中有这样一条SQL语句:

SELECT *
FROM book_list
WHERE 1
LIMIT 0, 5

意思是从第 0 条记录开始,读取 5 条记录。我们可以这一语句的特点来构建我们的函数,其实每次显示时就是要确定 $posion 即可了。实现代码如下:

$pageNO = 3; //确实显示第三页
$posion = ($pageNO - 1) * $pageSize; //计算从第几条记录读取

//然后构建如下SQL语句
$sql = “SELECT * FROM book_list WHERE 1 LIMIT $posion , $pageSize”;

即可以直接读出要显示的那一页所有数据。

那么下面即给一个简化版的分页类,可以对任何的数据表进行分页显示的。以便抛砖引玉.

PHP:

class Page {
    var
$tableName;        //操作的表

    
var $pageSize;        //页大小, 默认为10页
    
var $pageNO;        //当前页码即需要显示的页号
    
var $pageNum;          //页数统计

    
var $order_field;    //排序的字段
    
var $order_type;    //排序的方法

    //构造函数,实现附加功能
    //        $t 为操作的表名
    
function Page( $t ) {
        if (
$t == '' ) {
            echo
" Table name is incorrect ! ";
            return
FALSE;
        }

        
$this->tableName        = $t;
        
$this->pageSize         = 10;
        
$this->pageNO           = 1;
        
$this->pageNum          = NULL;
        
$this->order_field    =    '1';
        
$this->order_type        = 'DESC'
    
}

    
//设置页大小
    
function Set_PageSize( $p = 10 ) {
        
$this->pageSize = $p;
        return
TRUE;
    }

    
//设置当前页码
    
function Set_PageNo( $p ) {
        
$this->PageNo = $p;
        return
TRUE;
    }

    
//获得总页数
    //        $t 为具体的表
    
function Get_PageNum() {
        global
$db;        //引用一个全局的$db操作类对象

        
$sql = "SELECT count(*) AS num
                        FROM $this->tableName"
;
        
$result = $db->Query( $sql );
        
$obj = $db->FetchObject( $result );

        return
$this->pageNum = $obj->num;
    }

    
//获得当前页码
    
function Get_PageNo() {
        return
$this->pageNo;
    }

    
//获得当前分页大小
    
function Get_PageSize() {
        return
$this->pageSize;
    }

    
//获得需要显示的页的起启行号
    
function Get_Posion() {
        return
$posion = ( $this->pageNO - 1 ) * $this->pageSize;
    }

    
//读取数据表的数据
    //        $f 为需要读取的字段列表
    //        $c 为select语句的条件
    //
    //        结果将返回到数组内
    //
    //        $data[0] = array (
    //              fieldname    => value
    //                .
    //                .
    //                .
    //        )
    //
    
function Get_Page( $f = '*', $c = 1 ) {
        global
$db    //引用一个全局的$db操作类对象

        //获得起启行号
        
$posion = $this->Get_Posion();

        
$sql = "SELECT $f
                FROM $this->tableName
                WHERE $c
                ORDER BY $this->order_field $this->order_type
                LIMIT $posion , $this->pageSize"
;
        
$result = $db->Query( $sql );

        
$data = array();
        
$i = 1;

        while (
$arr = $db->FetchArray( $result ) ) {
            foreach (
$arr as $key => $var )
                
$data[$i][$key] = $var;
            
$i++;
        }

        return
$data;
    }
}


类调用示例
PHP:

$page
= new Page( 'book_list' );
//设定页大小为15页
$page->Set_PageSize(15);
//设定显示的页为第2页
$page->Set_PageNo(2);
//读取页数据
//读取书名和作者两个字段
//条件是作者一定要是stangly的所有的记录
$data = $page->Get_Page( "name, author", "author='stangly'" );

echo
"当前显示第".$page->Get_PageNo()."页数据";
foreach (
$data as $key => $var ) {
echo
"书名: $key";
echo
"作者: $var";
}

备注:本程序没有经过详细测试,可能会存在有BUG,还望您指出一二。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值