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灯服务器。
这是一个错误还是有办法解决这个问题?
答案 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>)