php mysql 高效分页_php+mysql 大容量数据高效分页效果(弃用limit)

发现当表中有很多上万条数据时,越后的数据用limit分页显示就越慢(>2秒),可能是mysql的特性所致。所以花了点时间总结实现了更优解决方案,最终实现毫秒级响应。若网友有更优的,请留言,谢谢!

if(isset($_GET["page"]))$page = intval($_GET["page"]);else $page =

1; //取出当前所在页,默认为1

$page_size =9; // 每页显示记录数

//完整的查询

$sql="select id,title,addtime,visit,content,(select count(*) from

blog_news where archive_id=blog_archive.id) as news_c,(select

realname from users where id=blog_archive.users_id) as creator from

blog_archive";

$sql_c="select id from blog_archive order by id desc";// 取出表所有id值

(强烈建议id为主键或已添加索引)

$result=conndb($sql_c);

if(getresult_right($result)){ //自定义的sql语句执行结果判断语句

$amount=mysql_num_rows($result);//得到总记录数

//$row =mysql_fetch_array($result);

while ($row =mysql_fetch_array($result)){

$conndb_arr[]=$row[0];//将所有id值存入数组

}

// 记算总共有多少页

if( $amount ){

if( $amount

< $page_size ){ $page_count = 1; }

//如果总数据量小于$PageSize,那么只有一页

if( $amount

% $page_size ){ //取总数据量除以每页数的余数

$page_count = (int)($amount / $page_size) + 1;

//如果有余数,则页数等于总数据量除以每页数的结果取整再加一

}else{

$page_count = $amount / $page_size ;

//如果没有余数,则页数等于总数据量除以每页数的结果

}

} else $page_count = 0;

if($page>$page_count)$page=(int)$page_count;

if( $amount ){

//array_slice($conndb_arr,($page-1)*$page_size,$page_size)表示取出id数组中的一段,从($page-1)*$page_size开始取$page_size个

$result=conndb("$sql where id

in(".implode(",",array_slice($conndb_arr,($page-1)*$page_size,$page_size)).")");

while ($row =mysql_fetch_array($result)){ //循环输出分页记录

echo $row[id]."
";

}

}else{

echo "没有找到任何记录!";

}

}

?>

转载自

http://hi.baidu.com/love_u13/blog/item/c18c68a262804c934610645d.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值