使用LIMIT时获取总行数

时间:2012-04-10 06:21:09

标签: php mysql

一直关注来自here和许多其他网站的示例,但未获得预期结果

我的PHP代码片段;

$query="SELECT * FROM book";
$result=mysql_query($query);
echo mysql_num_rows($result); //returns 14


$query="SELECT FOUND_ROWS()";
$rtotal=mysql_query($query);
echo mysql_result($rtotal,0); //returns 14


$query="SELECT * FROM book LIMIT 0,4";
$result=mysql_query($query);
echo mysql_num_rows($result); //returns 4


$query="SELECT FOUND_ROWS()";
$rtotal=mysql_query($query);
echo mysql_result($rtotal,0); //returns 4 Why is it 4 and not 14??

在最后一个例子中为什么它是4而不是14?我做错了什么?

2 个答案:

答案 0 :(得分:18)

将SQL_CALC_FOUND_ROWS添加到您的select语句中:http://dev.mysql.com/doc/refman/5.5/en/information-functions.html#function_found-rows

这会强制MySQL对行进行计数,就像限制语句不存在一样。

$query="SELECT SQL_CALC_FOUND_ROWS * FROM book LIMIT 0,4";

答案 1 :(得分:2)

您最近的查询返回了4行($query="SELECT * FROM book LIMIT 0,4";)。

这就是为什么它返回4而不是14。


引用文档:

  

如果最近成功的SELECT语句中没有SQL_CALC_FOUND_ROWS选项,则FOUND_ROWS()将返回该语句返回的结果集中的行数。如果语句包含LIMIT子句,则FOUND_ROWS()返回最多限制的行数。