【问题标题】:SQL_CALC_FOUND_ROWS with FOUND_ROWS always returns 1带有 FOUND_ROWS 的 SQL_CALC_FOUND_ROWS 始终返回 1
【发布时间】:2018-05-04 13:25:42
【问题描述】:
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 灯服务器。

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

【问题讨论】:

  • 为什么不在一个查询中COUNT(mytable.id)
  • 因为我有一个更改计数的组。我必须使用 found_rows()。所以请尝试为这个问题提供解决方案,我无法替换它,因为我没有发布额外的条件来保持查询的精确性。
  • @SebastianBrosch 请检查stackoverflow.com/questions/8222417/…
  • COUNT(DISTINCT col1)
  • @RickJames count(distinct col1) 给出 col1 的计数而不是输出表中的行数。 found_rows 查找输出表中的行数。

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


【解决方案1】:

解决方案 1:

请检查mysql版本。此错误存在于 5.6.* 中,并在 5.6.11 版本中得到解决。验证您的服务器的版本是否与 [5.6.*

这是一个在 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

【讨论】:

  • 使用 debian jessie、php 7.1.11、phpmyadmin 4.7.4、mariadb 10.2。我的查询仍然失败: select SQL_CALC_FOUND_ROWS, col1 , mytable.id from mytable group by col1 order by mytable.col2 desc limit 10 offset 10;选择 found_rows();
【解决方案2】:

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

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

另一方面——

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

你尝试过使用

select count( disctinct col1) from mytable

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

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

【讨论】:

  • 我认为他没有发布实际查询。但他想使用 found_rows() 函数来获取行数以及条件。但它不工作。并且 count 和 found_rows 出于不同的原因而工作。请检查他提供的这个链接。 stackoverflow.com/questions/8222417/…
猜你喜欢
  • 2017-07-11
  • 1970-01-01
  • 2018-05-13
  • 1970-01-01
  • 2017-08-10
  • 2017-03-10
  • 2013-08-03
  • 2011-09-25
  • 1970-01-01
相关资源
最近更新 更多