php+mysql分页问题,分页实现后,页码太多,如何仅显示前10页?

php+mysql分页问题,分页实现后,页码太多,如何仅显示前10页?,第1张

php 和html 混编  看起来真是 DT

文件名为t1.php 已经过调试  没有加错误捕捉 表名 tttt

<?php

header("Content-Type: text/html charset=utf-8")

$dbhost ="127.0.0.1"

$dbuser = "root"

$dbpwd = "*****"

$dbname = "*****"

$charName = "'UTF8'" //设置查询字符集gbk,gbk2312,utf-8

$mysqli = new  mysqli($dbhost,$dbuser,$dbpwd,$dbname)

if (mysqli_connect_errno()){ //注意mysqli_connect_error()新特性

die('Unable to connect!'). mysqli_connect_error()

}

$sql = "SET NAMES ".$charName

$mysqli->query($sql)

$perNumber=50 //每页显示的记录数

$page=isset($_GET['page'])?$_GET['page']: 1  //获得当前的页面值

//echo $page

$sql="select count(*) as count from tttt"

$rs=$mysqli->query($sql) //获得记录总数

$row=mysqli_fetch_array($rs,MYSQLI_ASSOC) 

$totalNumber=$row['count']

$totalPage=ceil($totalNumber/$perNumber) //计算出总页数

$startCount=($page-1)*$perNumber //分页开始,根据此方法计算出开始的记录

$result=$mysqli->query("select * from tttt order by id desc limit $startCount,$perNumber") //根据前面的计算出开始的记录和记录数

$maxPageCount=10 

$buffCount=5

$startPage=1

if  ($page< $buffCount){

$startPage=1

}else if($page>=$buffCount  and $page<$totalPage-$maxPageCount  ){

$startPage=$page-$buffCount+1

}else{

$startPage=$totalPage-$maxPageCount+1

}

$endPage=$startPage+$maxPageCount-1

$htmlstr=""

$line=1

while ($row=mysqli_fetch_array($result,MYSQLI_ASSOC)){

$htmlstr.=$line."行"

$htmlstr.=$row['id']." </br>"

$line++

$htmlstr.="<table><tr>"

if ($page > 1){

$htmlstr.="<td> <a href='t1.php?page=". 1 ."' >第一页</a> </td>"

$htmlstr.="<td> <a href='t1.php?page=". ($page-1) ."' >上一页</a> </td>"

}

for ($i=$startPage$i<=$endPage $i++){

$htmlstr.="<td><a href='t1.php?page=".$i."'>".$i."</a></td>"

}

if ($page<$totalPage){

$htmlstr.="<td><a href='t1.php?page=".($page+1) . "' >下一页</a> </td>"

$htmlstr.="<td><a href='t1.php?page=".$totalPage . "' >最后页</a> </td>"

}

$htmlstr.="</tr></table>"

echo   $htmlstr

?>

第一、phpmyadmin 的查询结果显示了分页数据、总条数信息及索引信息,看似只执行了一次查询,实际上是做了多次查询的,只是页面中没显示出来,但是查看 mysql 的运行日志就会发现,其实已经执行了很多条 sql 语句,因为 phpmyadmin 的 *** 作基本都是批量执行增删改查的;

第二、有一种方式可以实现只查询一次就能达到分页的效果,但实际上这种方式是不推荐的,性能比查询两次(一次查总数,一次查分页数据)低了很多,尤其在数据量越大的时候差异越明显;

一次查询的思路是:一次性把满足条件的数据全都查出来,然后再从结果中去取实际分页中要显示的那部分数据;例如,根据标题搜索数据,每页显示20条,一次性总共查出来 1000 条数据,显示第一页的时候就只获取前面的20条,第二页就取第21-40条,第三页就只取41-60条,后面的依次类推。

可想而知,这种查询是很浪费的,我明明只要那一部分数据,却查出了所有的,剩下那部分就根本没用。尤其在数据量大的时候,上万条百万条等等,性能就更差了,如果再加上高并发,那基本就要崩溃了。

所以做分页一般都是查两次比查一次好得多


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/6179027.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-17
下一篇 2023-03-17

发表评论

登录后才能评论

评论列表(0条)

保存