php mysql数据库操作分页类


Posted in PHP onJune 04, 2008
<?php 
/* 
 *    mysql数据库 分页类 
 *    @package    pagelist 
 *    @author        yytcpt(无影) 
 *    @version    2008-03-27 
 *    @copyrigth    http://www.d5s.cn/  
 */ 
/* 
 *    分页样式 
    .page{float: left;font: 11px Arial, Helvetica, sans-serif; padding:6px 0; margin: 0px 10%; margin-top: 10px;} 
    .page a, .page strong{padding: 2px 6px; border: solid 1px #ddd;    background: #fff; text-decoration: none;} 
    .page a:visited{padding: 2px 6px; border: solid 1px #ddd; background: #fff; text-decoration: none;} 
    .page .break{padding: 2px 6px; border: none; background: #fff; text-decoration: none;} 
    .page strong{padding: 2px 6px; border-color: #999; font-weight: bold; font-size: 13px; vertical-align: top; background: #fff;} 
    .page a:hover{color: #fff; background: #0063DC; border-color: #036; text-decoration: none;} 
    .page a:hover div{color: #FFF;cursor: pointer !important;cursor: hand;} 
*/ 
    class pagelist{ 
        var $page;            //分页页码 
        var $sql;            //分页sql 
        var $img_path;        //图标路径 
        var $img;            //图标名称 
        var $img_btn;        //图标地址 
        var $page_size;        //设置每页显示条数 
        var $num_btn;        //设置数字分页的显示个数 
        var $total_pages;    //一共分多少页 
        var $total_records;    //一共有多少条记录 
        var $url; 
        var $table; 
        var $new_sql;        //指定的SQL语句 
        var $db; 
        function __construct(){ 
            global $db; 
            $this->db = $db; 
            $tmp_page = intval(trim($_GET["page"])); 
            $this->page = empty($tmp_page)?1:$tmp_page; 
            $this->set_table(); 
            $this->page_size = 20; 
            $this->num_btn    = 9; 
            $this->img_path    = '/images/'; 
            $this->img        = array("ico_first.gif", "ico_front.gif", "ico_next.gif", "ico_last.gif"); 
        } 
        function set_table(){ 
            $this->table["tablename"]    = ""; 
            $this->table["id"]        = "id"; 
            $this->table["orderby"]    = $this->table["id"]; 
            $this->table["descasc"]    = "DESC"; 
            $this->table["fileds"]    = "*"; 
            $this->table["where"]    = ""; 
        } 
        function set_img(){ 
            $this->img_btn[0]    = "<img src='".$this->img_path.$this->img[0]."' alt='首页' border='0' align='absmiddle'/>"; 
            $this->img_btn[1]    = "<img src='".$this->img_path.$this->img[1]."' alt='上一页' border='0' align='absmiddle'/>"; 
            $this->img_btn[2]    = "<img src='".$this->img_path.$this->img[2]."' alt='下一页' border='0' align='absmiddle'/>"; 
            $this->img_btn[3]    = "<img src='".$this->img_path.$this->img[3]."' alt='末页' border='0' align='absmiddle'/>"; 
        } 
        function set_show_page(){ 
            $this->set_img();        //设置翻页图片路径 
            $this->set_url(); 
            $this->set_total_records(); 
            if ($this->total_records<$this->page_size){ 
                $this->total_pages = 1; 
            }else{ 
                $this->total_pages = ceil($this->total_records/$this->page_size); 
            } 
            if ($this->page>$this->total_pages){ 
                $this->page = $this->total_pages; 
            } 
        } 
        function show_first_prv(){ 
            if ($this->page==1){ 
                $str = "<strong>".$this->img_btn[0]."</strong> <strong>".$this->img_btn[1]."</strong>"; 
            }else{ 
                $str = "<a href='".$this->url."1"."'>".$this->img_btn[0]."</a> ";    //此处1为首页,page值为1 
                $str.= "<a href='".$this->url.($this->page-1)."'>".$this->img_btn[1]."</a>"; 
            } 
            return $str; 
        } 
        function show_next_last(){ 
            if ($this->page>=$this->total_pages){ 
                $str =  "<strong>".$this->img_btn[2]."</strong> <strong>".$this->img_btn[3]."</strong>"; 
            }else{ 
                $str = "<a href='".$this->url.($this->page+1)."'>".$this->img_btn[2]."</a> "; 
                $str.= "<a href='".$this->url.$this->total_pages."'>".$this->img_btn[3]."</a>"; 
            } 
            return $str; 
        } 
        function show_num_text(){ 
            $str = " 转到第 <input id='go_num_text' type='text' value='".$this->page."' style='border:0;border-bottom:1px solid #CCC;text-align:center;width:20px;'/> 页 "; 
            $str.= "<a href='#' onClick=\"window.location='".$this->url."'+document.getElementById('go_num_text').value;\" style='font-family: Arial, Helvetica, sans-serif;font-weight:bold;font-size:14px;'>[Go]</a>"; 
            return $str; 
        } 
        function show_num_select(){ 
            if ($this->total_pages<50){ 
                $str = "<select onchange=\"if(this.options[this.selectedIndex].value!=''){location=this.options[this.selectedIndex].value;}\">"; 
                for ($i=1; $i<=$this->total_pages; $i++){ 
                    $str.= "<option value='".$this->url.$i."' ".($this->page==$i ? " selected='selected'":"").">".$i."</option>"; 
                } 
                $str.= "</select> "; 
            }else{ 
                $str = ""; 
            } 
            return $str; 
        } 
        function show_num_btn(){ 
            if ($this->page>=1 and $this->page<=$this->total_pages){ 
                $tmp_p    = ($this->num_btn-1)/2; 
                if (($this->page - $tmp_p)<=0){ 
                    $start_p    = 1; 
                }else{ 
                    if (($this->page-$tmp_p)>$this->num_btn and ($this->page-$tmp_p)>($this->total_pages - $this->num_btn+1)){ 
                        $start_p    = $this->total_pages - $this->num_btn + 1; 
                    }else{ 
                        $start_p    = $this->page - $tmp_p; 
                    } 
                } 
                if (($this->page+$tmp_p) < $this->total_pages){ 
                    $end_p = ($this->page + $tmp_p)<$this->num_btn?$this->num_btn:($this->page + $tmp_p); 
                    if ($end_p>$this->total_pages){ 
                        $end_p = $this->total_pages; 
                    } 
                }else{ 
                    $end_p = $this->total_pages; 
                } 
            } 
            $str = ""; 
            for ($i=$start_p; $i<=$end_p; $i++){ 
                if ($i==$this->page){ 
                    $str.= " <strong>".$i."</strong> "; 
                }else{ 
                    $str.= " <a href='".$this->url.$i."'>".$i."</a> "; 
                } 
            } 
            return $str; 
        } 
        function show_page_info(){ 
            $str = " 共".$this->total_records."条/".$this->total_pages."页"; 
            return $str; 
        } 
        function show_page(){ 
            if ($this->total_records<1){ 
                $this->set_show_page(); 
            } 
            $str = $this->total_pages>1 ? $this->show_first_prv().$this->show_num_btn().$this->show_next_last().$this->show_page_info().$this->show_num_text():""; 
            return $str; 
        } 
        //总页数 
        function set_total_pages(){ 
            $this->total_pages = ceil($this->total_records/$this->page_size); 
        } 
        //总记录数 
        function set_total_records(){ 
            if ($this->total_records==0 or !isset($this->total_records)){ 
                if (empty($this->count_sql) and !empty($this->table["tablename"])){ 
                    $sql = "SELECT count(".$this->table["id"].") as count_id FROM `".$this->table["tablename"]."` ".($this->table["where"]!=""?" WHERE ".$this->table["where"]:""); 
                }else{ 
                    $sql = preg_replace("/SELECT(.*?)FROM(.*?)/i", "SELECT count(id) AS count_id FROM\\2", $this->sql); 
                } 
                $arr = $this->db->row_query_one($sql); 
                $this->total_records = $arr["count_id"]; 
            } 
        } 
        /* 
         * 根据sql返回查询数据 
         * 指定$sql时,不必指定limit 
         */ 
        function get_rows_by_sql($sql){ 
            $this->sql = $sql." LIMIT ".$this->page_size*($this->page-1).", ".$this->page_size;    //指定的SQL; 
            return $this->db->row_query($this->sql); 
        } 
        /* 
         * 最常用的分页方法,只需要传3个参数 
         * $tablename 表名, $where 查询条件, $orderby 排序字段(默认以id倒序排列) 
         */ 
        function get_rows($tablename, $where="", $orderby=""){ 
            $this->table["tablename"]    = $tablename; 
            $this->table["where"]        = $where; 
            $orderby ? $this->table["orderby"] = $orderby : ""; 
            $arr = array( 
                "page"    => $this->show_page(),            //分页代码 
                "rows"    => $this->get_rows_by_sql(),    //记录数 
                "sum"    => $this->total_records,        //总记录数 
            ); 
            return $arr; 
        } 
        /* 
         * 特殊查询,$sql_query 查询sql语句, $row_count 统计总数 
         */ 
        function get_rows_sql($sql_query, $row_count=0) { 
            $this->total_records = $row_count; 
            $arr["rows"]    = $this->get_rows_by_sql($sql_query); 
            $arr["page"]    = $this->show_page(); 
            $arr["sum"]        = $this->total_records; 
            return $arr; 
        } 
        function get_sql(){ 
            if ($this->total_records>10000) { 
                $this->sql = "SELECT ".$this->table["fileds"]." FROM `".$this->table["tablename"]."` ".($this->table["where"]!=""?" WHERE ".$this->table["where"].' AND '.$this->table["id"].'>=':' WHERE '.$this->table["id"].'>=').'(SELECT '.$this->table["id"].' FROM `'.$this->table["tablename"].'` ORDER BY '.$this->table["id"].' LIMIT '.$this->page_size*($this->page-1).', 1)'." ORDER BY ".$this->table["orderby"]." ".$this->table["descasc"]." LIMIT ".$this->page_size; 
            }else{ 
                $this->sql = "SELECT ".$this->table["fileds"]." FROM `".$this->table["tablename"]."` ".($this->table["where"]!=""?" WHERE ".$this->table["where"]:"")." ORDER BY ".$this->table["orderby"]." ".$this->table["descasc"]." LIMIT ".$this->page_size*($this->page-1).", ".$this->page_size; 
            } 
            //SELECT * FROM articles ORDER BY id DESC LIMIT 0, 20 
            //SELECT * FROM articles WHERE category_id = 123 AND id >= (SELECT id FROM articles ORDER BY id LIMIT 10000, 1) LIMIT 10 
            return $this->sql;        //SQL语句 
        } 
        function set_url(){ 
            $arr_url = array(); 
            parse_str($_SERVER["QUERY_STRING"], $arr_url); 
            unset($arr_url["page"]); 
            if (empty($arr_url)){ 
                $str = "page="; 
            }else{ 
                $str = http_build_query($arr_url)."&page="; 
            } 
            $this->url = "http://".$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"]."?".$str; 
        } 
    } 
?>

<?php  
    $db_config["hostname"]    = "127.0.0.1";    //服务器地址  
    $db_config["username"]    = "root";        //数据库用户名  
    $db_config["password"]    = "root";        //数据库密码  
    $db_config["database"]    = "wap_blueidea_com";        //数据库名称  
    $db_config["charset"]    = "utf8";  
    $config["charset"]        = "utf-8";        //网站编码      include('db.php');  
    include('pagelist.php');  
    $db    = new db();  
    $db->connect($db_config);  
    header("content-type:text/html;charset=".$config["charset"]);//设置页面编码  
    $pl = new pagelist();  
    $arr = $pl->get_rows('table_name');  
    unset($pl);  
    echo '<pre style="text-align:left">';  
    print_r($arr);  
    echo '</pre>';  
    //指定特殊 sql 时候  
    $pl = new pagelist();  
    $sql = 'SELECT * FROM `wap_article` AS a, `wap_article_info` AS b WHERE a.id=b.articleid';  
    $arr = $pl->get_rows_sql($sql);  
    unset($pl);  
    echo '<pre style="text-align:left">';  
    print_r($arr);  
    echo '</pre>';  
?> 
当表中的记录总数在 10000条以上时,使用了 子查询分页,这样效率会更高一些,数据量小的时候,直接查询更快。
PHP 相关文章推荐
使用bcompiler对PHP文件进行加密的代码
Aug 29 PHP
初品cakephp 入门基础
Feb 16 PHP
php如何调用webservice应用介绍
Nov 24 PHP
PHP+FFMPEG实现将视频自动转码成H264标准Mp4文件
Sep 24 PHP
PHP中substr()与explode()函数用法分析
Nov 24 PHP
ThinkPHP通过AJAX返回JSON的两种实现方法
Dec 18 PHP
php缓冲输出实例分析
Jan 05 PHP
ThinkPHP中create()方法自动验证实例
Apr 26 PHP
Yii1.1框架实现PHP极光推送消息通知功能
Sep 06 PHP
PHP levenshtein()函数用法讲解
Mar 08 PHP
laravel 解决强制跳转 https的问题
Oct 22 PHP
laravel框架中视图的基本使用方法分析
Nov 23 PHP
php mysql数据库操作类
Jun 04 #PHP
CodeIgniter php mvc框架 中国网站
May 26 #PHP
五个PHP程序员工具
May 26 #PHP
需要使用php模板的朋友必看的很多个顶级PHP模板引擎比较分析
May 26 #PHP
JS实现php的伪分页
May 25 #PHP
php中iconv函数使用方法
May 24 #PHP
在PHP中使用模板的方法
May 24 #PHP
You might like
wordpress安装过程中遇到中文乱码的处理方法
2015/04/21 PHP
Javascript 读取操作Sql中的Xml字段
2014/10/09 Javascript
jQuery简单实现隐藏以及显示特效
2015/02/26 Javascript
JS控制表格实现一条光线流动分割行的方法
2015/03/09 Javascript
JS函数的几种定义方式分析
2015/12/17 Javascript
JavaScript+CSS实现的可折叠二级菜单实例
2016/02/29 Javascript
jQuery插件ajaxfileupload.js实现上传文件
2020/10/23 Javascript
jQuery实现的网格线绘制方法
2016/06/20 Javascript
如何解决IONIC页面底部被遮住无法向上滚动问题
2016/09/06 Javascript
JS 对java返回的json格式的数据处理方法
2016/12/05 Javascript
JavaScript提高加载和执行效率的方法
2017/02/03 Javascript
angular4自定义组件详解
2017/09/28 Javascript
浅谈在vue中用webpack打包之后运行文件的问题以及相关配置方法
2018/02/21 Javascript
mpvue将vue项目转换为小程序
2018/09/30 Javascript
JS使用正则表达式提交页面验证的代码
2019/10/16 Javascript
elementUI同一页面展示多个Dialog的实现
2020/11/19 Javascript
python访问sqlserver示例
2014/02/10 Python
基于Python __dict__与dir()的区别详解
2017/10/30 Python
Python3实现爬取指定百度贴吧页面并保存页面数据生成本地文档的方法
2018/04/22 Python
python编写暴力破解zip文档程序的实例讲解
2018/04/24 Python
python turtle库画一个方格和圆实例
2019/06/27 Python
如何在Django配置文件里配置session链接
2019/08/06 Python
Python中pymysql 模块的使用详解
2019/08/12 Python
python内打印变量之%和f的实例
2020/02/19 Python
在python中logger setlevel没有生效的解决
2020/02/21 Python
python实现logistic分类算法代码
2020/02/28 Python
Python通过zookeeper实现分布式服务代码解析
2020/07/22 Python
python 实现朴素贝叶斯算法的示例
2020/09/30 Python
固特异美国在线轮胎店:Goodyear Tire
2019/02/23 全球购物
医学专业五年以上个人求职信
2013/12/03 职场文书
小学敬老月活动方案
2014/02/11 职场文书
《小草和大树》教学反思
2014/02/16 职场文书
健康教育评估方案
2014/05/25 职场文书
二审代理词范文
2015/05/25 职场文书
从零开始在Centos7上部署SpringBoot项目
2022/04/07 Servers
Java 定时任务技术趋势简介
2022/05/04 Java/Android