有关分页 select count(*) from `def` where `g`='h'这样来统计记录总条数,效率会高很多。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 FOUND_ROWS() 返回最后一个 SELECT SQL_CALC_FOUND_ROWS ... 命令如果没有以 LIMIT 进行限制结果时将返回记录行数。 mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name WHERE id > 100 LIMIT 10;mysql> SELECT FOUND_ROWS();第二个 SELECT 将返回一个数字,它指示前一个没有被 LIMIT 子句限制的 SELECT 将返回多少行记录。注意,如果你使用 SELECT SQL_CALC_FOUND_ROWS ...,MySQL 不得不计算所有的记录行到结果集中。然而,这与你不使用 LIMIT 相比是更快一点的,因为结果集不需要发送到客户端。 SQL_CALC_FOUND_ROWS 从 MySQL 4.0.0 开始可以被使用。 keaizhong(可爱钟)的SQL可以用来第一次检索符合条件的总记录数,然后总记录数可以作为GET参数传递,而不用每次都查询每次查询的只是limit ($page-1)*$pagesize ,30; 不乖天使,如果只传递总记录数的话是不妥的.因为比如在经常变化的记录中,最好别这么用.比如说BBS中.如果是在一个网站内.变化不是很大.或者很长时间才会变化记录.可以这么用. 每次运行不带参数的页面时都会重新计算记录数,进行添加或删除操作后转到不带总记录数参数的页面,如果只是进行翻页操作就可以使用这个参数,当然在检索后且翻页前有可能存在有些记录发生变化的情况,但概率是非常小的,即使是论坛也是手动刷新后才会重新计算记录数简单的算法 + 较小的系统开销 + 很难感觉出的不便 = 实用的程序下面的代码可以作为通常情况下分页的代码:if(isset($_GET['allrecord']) && $_GET['allrecord']!='') //已经进行过记录检索 $allreocrd=$_GET['allrecord'];else //还未进行过记录检索{ $sql="select count(*) from table where xxx=xxxx"; $result=mysql_query($sql,$conn); $rs=mysql_fetch_array($result); $allrecord=$rs['count(*)']; mysql_free_result($result);}$pagesize=30;$allpage=ceil($allrecord/$pagesize);if(isset($_GET['page']) && $_GET['page']!='') $page=$_GET['page'];else $page=1;if($page>$allpage) //如果页号大于总页数则另其等于总页数(包括总页数等于0) $page=$allpage;if($page<1) //如果页号小于1则另其等于1 (此句不能和上句颠倒) $page=1;$offset=($page-1)*$pagesize;$sql="查询语句 limit".$offset.",".$pagesize;$result=mysql_query($sql,$conn);<a href="?allrecord=<?=$allrecord?>&page=<?=$page-1?>">上一页</a><a href="?allrecord=<?=$allrecord?>&page=<?=$page+1?>">下一页</a>通常情况下完全可以这样做的,如果需要随时随地计算总记录数,这样对系统开销显然是非常不利的 php 问题求大大解答 memcache缓存的疑问 关于正则方面的 一个想法,不知道可以不 急,请问如何压缩图片的大小 在《PHP程序设计》上看到一句话,不太理解。特来求教,谢谢! 页面被注入<ifframe>(该文件没有可写的权限)....这是怎么注入进去的.怎么样解决. 动态表单提交 救命啊,我的PHP传不了值啊,在线等~~~~ 真奇怪,一传上去就不能正常连接了! 在win98下以sapi安装apache1.3.x+php420rc3的时候,php解释很慢,最后显示找不到文件,why??? 使用sybase的php页面奇怪问题!!! 现在有一个联通的接口,怎么样实现短信收发功能
返回最后一个 SELECT SQL_CALC_FOUND_ROWS ... 命令如果没有以 LIMIT 进行限制结果时将返回记录行数。
mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name
WHERE id > 100 LIMIT 10;
mysql> SELECT FOUND_ROWS();第二个 SELECT 将返回一个数字,它指示前一个没有被 LIMIT 子句限制的 SELECT 将返回多少行记录。注意,如果你使用 SELECT SQL_CALC_FOUND_ROWS ...,MySQL 不得不计算所有的记录行到结果集中。然而,这与你不使用 LIMIT 相比是更快一点的,因为结果集不需要发送到客户端。 SQL_CALC_FOUND_ROWS 从 MySQL 4.0.0 开始可以被使用。
每次查询的只是limit ($page-1)*$pagesize ,30;
比如说BBS中.如果是在一个网站内.变化不是很大.或者很长时间才会变化记录.可以这么用.
简单的算法 + 较小的系统开销 + 很难感觉出的不便 = 实用的程序
下面的代码可以作为通常情况下分页的代码:if(isset($_GET['allrecord']) && $_GET['allrecord']!='') //已经进行过记录检索
$allreocrd=$_GET['allrecord'];
else //还未进行过记录检索
{
$sql="select count(*) from table where xxx=xxxx";
$result=mysql_query($sql,$conn);
$rs=mysql_fetch_array($result);
$allrecord=$rs['count(*)'];
mysql_free_result($result);
}
$pagesize=30;
$allpage=ceil($allrecord/$pagesize);
if(isset($_GET['page']) && $_GET['page']!='')
$page=$_GET['page'];
else
$page=1;
if($page>$allpage) //如果页号大于总页数则另其等于总页数(包括总页数等于0)
$page=$allpage;
if($page<1) //如果页号小于1则另其等于1 (此句不能和上句颠倒)
$page=1;
$offset=($page-1)*$pagesize;
$sql="查询语句 limit".$offset.",".$pagesize;
$result=mysql_query($sql,$conn);<a href="?allrecord=<?=$allrecord?>&page=<?=$page-1?>">上一页</a>
<a href="?allrecord=<?=$allrecord?>&page=<?=$page+1?>">下一页</a>通常情况下完全可以这样做的,如果需要随时随地计算总记录数,这样对系统开销显然是非常不利的