带有FOUND_ROWS的SQL_CALC_FOUND_ROWS始终返回1

时间:2017-11-21 07:00:05

标签: php mysql laravel-5 mariadb sql-calc-found-rows

select SQL_CALC_FOUND_ROWS, col1 , mytable.id from mytable group by col1;

select found_rows();
select found_rows() , col1  , mytable.id from mytable group by col1;

以上查询的结果始终为1。我使用的是php 7.1和maria db 10.1。

我的后端是laravel 5.5,我在mysql上发出DB :: raw请求。 服务器apache灯服务器。

这是一个错误还是有办法解决这个问题?

2 个答案:

答案 0 :(得分:1)

解决方案1:

请检查mysql版本。这个bug存在于5.6。*中,并在5.6.11版本中得到解决。验证您的服务器的版本与[5.6。*< 5.6.11]使这项工作。

这是mysql [不在mariadb]中发布的错误: http://bugs.mysql.com/bug.php?id=68458

如果您已经验证了mysql的版本,请查看以下说明:

  

注意:在bug链接中提到" MySQL服务器编译自" 5.6.11-log源代码分发"还有这个错误。"

解决方案2:

同一查询中的

found_rows()和限制不会导致总计数,但会为具有限制的数据提供计数。 如果选择查询中存在限制,则必须使用

 "select SQL_CALC_FOUND_ROWS, ....... limit x;"

然后立即执行

"select found_rows();"

OR

如果select语句没有限制,则可以直接执行

"select found_rows(), .......;"

此处的说明:https://dev.mysql.com/doc/refman/5.7/en/information-functions.html#function_found-rows

答案 1 :(得分:0)

示例查询似乎有误,因为您应该让 col1 成为所选字段的一部分

found_rows返回上一个查询中找到的行数。 你检查过第一个查询的结果了吗?它返回多少行? 如果它返回超过1行 - 意味着在您的查询之间执行某些查询并在同一会话中选择found_rows()。 我没有成功重现此问题,但您可以尝试在此使用事务

另一方面 -

从查询中看来,您似乎试图从表中获取一个不同的计数,但出于某种原因使用了一个组。

你尝试使用

吗?
select count( disctinct col1) from mytable

如果这不适合您,您的第二个最佳选择是:

select count(1) from (<your query goes here>)