使用LIMIT时获取总行数

9

我一直在参考这里和其他很多网站的例子,但是没有得到预期的结果。

以下是我的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个回答

18

请注意,这应该添加到第三个查询中。 - alexn
谢谢!这甚至在我阅读的博客中都提到了,但不知何故我完全错过了。 - user6890

2
您最近的查询返回了4行数据($query="SELECT * FROM book LIMIT 0,4";)。这就是为什么它返回的是4而不是14。
引用文档中的话:
如果在最近成功的SELECT语句中没有使用SQL_CALC_FOUND_ROWS选项,则FOUND_ROWS()函数返回该语句返回的结果集中的行数。如果该语句包含LIMIT子句,则FOUND_ROWS()函数返回限制之前的行数。

1
错误。 FOUND_ROWS返回的是如果没有设置限制,则由前一个查询返回的行数。 http://dev.mysql.com/doc/refman/5.5/en/information-functions.html#function_found-rows - alexn
1
@alexn:这并没有错,可以参考上面引用的文档。但是为了使其按预期工作,需要添加SQL_CALC_FOUND_ROWS - Simeon Visser
2
现在你已经编辑了你的答案,它是正确的。你说因为之前的查询中使用了限制,所以它没有起作用。如果你的答案被编辑过,我会取消我的踩。 - alexn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接