count(*),*
from
table
.
你直接就可以获得总数和所有记录。调用的时候直接传页数(也就是你count(*)除以你每页个数后的结果中的一页。)直接在
for循环
里遍历你需要的那一部份然后输出就ok了。
做一些数据库查询,不仅希望得到要查询的结果,还希望方便地计算一下查询结果中有多少条记录。我通常的做法是:
$q = "select * from $fromTable where $where limit $start,$pageSize"
$r = mysql_query($q)
$q = "select count(*) from $fromTable where $where"
$cnt = mysql_query($q)
当 然可以用mysql_num_rows()或者mysql_affected_rows()来在第一次查询后得到记录数目,但是这两个函数返回的都是查询 后得到的结果的数目,是受limit语句的影响的。很多情况下,需要知道这条查询语句在没有limit的情况下结果总数,比如分页查询。
mysql 中本身支持一种更好的方法来达到上面的效果,那就是使用SQL_CALC_FOUND_ROWS和FOUND_ROWS()函数。
2020-03-01
对于count的函数的使用,我们常见的一个错误是在括号内随意指定一个列去统计结果集的行数。但只有指定的行确实都是有值的时候,统计的才是实际的行数,否则可能统计的结果并不是实际的行数。而对于MyISAM存储引擎,如果某一列的值确实不可能为null时,MySQL内部就会将count()函数优化成count(*),若没有带where条件,此时计算速度是非常快的,因为此时没有实际的去计算表的行数。
总结: 对于MyISAM存储引擎,不带where条件的count(*)是非常快的。
技巧:
利用上述MyISAM的count(* )特性,加速一些特定查询条件的count()查询。
如:
对于select count(* ) from tablename where id >10可以做如下的反转查询:
select (select count(* ) from tablename) - count(* ) from tablename where id <10
因为这样在查询阶段MySQL将子查询当做一个常数来处理,大大减少了扫描的行数。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)