概述
发现当表中有很多上万条数据时,越后的数据用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
最后
以上就是动人白云为你收集整理的php mysql 高效分页_php+mysql 大容量数据高效分页效果(弃用limit)的全部内容,希望文章能够帮你解决php mysql 高效分页_php+mysql 大容量数据高效分页效果(弃用limit)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复