接受的答案似乎是错误的。因为它建议在使用 LIMIT 的查询之后使用 found_rows() 。
答案:问题是关于 RETURN 1 和在某些情况下 0 作为 found_rows(); 的结果。
在您的第一个 select 语句之后执行一些其他查询时会发生这种情况。特别是当您使用 IDE 或某些客户端运行查询时,会在查询之前和之后执行一些附加的“准备”查询。
found_rows() 将返回服务器上运行的 LAST 查询返回的结果数。在这种情况下,这不是我们所期望的。
因此返回 1 或 0 错误。
验证:
您可以通过在服务器上启用常规日志记录并执行查询来验证这一点。您将看到在“第一个查询和找到的行查询”之间执行了几个附加查询。
FIX
存储过程,或旧的 COUNT(*)。
性能方面几乎没有任何区别。
额外的
如果您的目标是查找返回的总行数,那很好。并且 SQL_CALC_FOUND_ROWS 的使用变得无关紧要。
这是一般规则,找到的行不需要 LIMIT,SQL_CALC_FOUND_ROWS 也不需要。但是它们中的三个可以一起使用来给出一个非常有用的结果。
即运行类似的东西。
SELECT SQL_CALC_FOUND_ROWS * from some_table_name LIMIT 0,10;
SELECT FOUND_ROWS();
如果我们运行 SELECT * from sometable_name,我们将获得查询将返回的行数;即:没有限制。
话说回来,
SELECT * from some_table_name LIMIT 0, 10;
SELECT FOUND_ROWS();
会给我们结果的总数,其中限制的 cos 将 <=10。并且没有任何实际用途,但这不是错误。