background image

 

PHP

编程 PHP 分页效率终结版

  这里仅展示出设计思路,具体安全问题,是否同步更新等可根据具体需求添加修改:
以前人们常用的 PHP 分页技术,通常都需要先统计出数据库中总信息条数才能判断出总页
数并对其进行分页,,也就是说,每次分页要对数据库进行两次调用,在面临大数据量,高并发
查询情况下是很不效率的,曾经一直为这个问题烦恼但都没想到合适的解决方法,今天突然

 

在睡梦中 遇见奇迹...具体分析原理如下:(红色部分为优化后的区别,思路采用最原始的
代码书写,为了照顾新人)
原始分页技术:包括许多开源程序也在使用的技术;
  一般都是对数据库信息进行统计,然后调用分页类,进行分页,,每次都要经过 2 次数据
库查询操作
例(原始分页技术):  每次都要进行 2 次数据库查询
代码如下:
 

    

$sqlstr

="select  count(*)  as total  from  tablename";

    

$sql

=mysql_query(

$sql

or

 

die

("error");

 

$info

=mysql_fetch_array(

$sql

);  

//

 

第一次 数据库调用

    

$total

=

$info

["total"];

//

 

 

每次翻页都要进行 总信息条数 的数据库查询操作

    

$pagesize

=10; 

//每页显示数量

    

$page

=

$_GET

["page"]?max(

intval

(

$_GET

["page"]),1):1;

//当前页

    

if

(

$total

){,

    

  

$sql

="select * from  tablename  limit "(

$page

-1)*

$pagesize

",$pagesize";

    

  

$sql

=mysql_query(

$sql

or

 

die

("error");

//第二次数据库查询操作

    

  

$info

=mysql_fetch_array(

$sql

);

   

do

{

    ...............

            

}

while

(

$info

=mysql_fetch_array(

$sql

));

            

include

("page_class.php");

//调用分页类

            

$url

="url.php?page=" 

//

 

假设当前页为 URL.PHP

            echo

 

$get_page

=

new

 get_page(

$url

,

$total

,

$pagesize

,

$page

); 

//URL 为要分页的 URL

地址

   

}

   

//优化后的分页技术(只需在第一次调用时进行信息统计即可)

    

if

(isset(

$_GET

["total"])){   

//只需要进行一次总信息条数的统计即可

   

$total

=

intval

(

$_GET

["total"]);

 

//以后的的总信息数量通过 GET 传递即可,节省了 1/2 的数据库负荷,,,,

    

}

else

{

    

  

$sqlstr

="select  count(*)  as total  from  tablename";

    

  

$sql

=mysql_query(

$sql

or

 

die

("error");

   

$info

=mysql_fetch_array(

$sql

);  

//

 

第一次 数据库调用

            

$total

=

$info

["total"];