2
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 灯服务器。

这是一个错误还是有一些解决方法?

4

2 回答 2

1

解决方案1:

请检查mysql版本。此错误存在于 5.6.* 中,并在 5.6.11 版本中得到解决。验证您的服务器的版本是否与 [5.6.* < 5.6.11] 不同以使其正常工作。

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

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

注意:bug链接中提到“从“5.6.11-log Source distribution”编译的MySQL服务器仍然存在这个bug。”


解决方案2:

found_rows() 和 limit 在同一个查询中不会产生总计数,但会为有限制的数据提供计数。如果选择查询中有限制,您将不得不使用

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

然后立即执行

"select found_rows();"

或者

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

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

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

于 2017-11-22T07:42:39.450 回答
0

示例查询似乎是错误的,因为您应该将col1作为选定字段的一部分

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

另一方面——

从查询中,您似乎正在尝试从表中获取不同的计数,但出于某种原因使用 group by。

你试过用吗

select count( disctinct col1) from mytable

如果这对您不起作用,您的第二个最佳选择是:

select count(1) from (<your query goes here>)
于 2017-11-21T07:33:23.777 回答