使用LIMIT时获取总行数?

时间:2012-10-14 22:42:00

标签: mysql

  

可能重复:
  Find total number of results in mySQL query with offset+limit

我有一个非常复杂的SQL查询,它返回分页的结果。问题是在LIMIT之前得到总行数我必须运行两次sql查询。第一次没有limit子句来获取总行数。 sql查询非常复杂,我认为如果不运行两次查询,它们必须是更好的方法。

1 个答案:

答案 0 :(得分:90)

幸运的是,自MySQL 4.0.0起,您可以在查询中使用SQL_CALC_FOUND_ROWS选项,这将告诉MySQL计算忽略LIMIT子句的总行数。您仍然需要执行第二个查询以检索行计数,但这是一个简单的查询,并不像检索数据的查询那么复杂。 用法非常简单。在主要查询中,您需要在SQL_CALC_FOUND_ROWS之后添加SELECT选项,在第二个查询中,您需要使用FOUND_ROWS()函数来获取总行数。查询看起来像这样:

SELECT SQL_CALC_FOUND_ROWS name, email FROM users WHERE name LIKE 'a%' LIMIT 10;

SELECT FOUND_ROWS();

唯一的限制是您必须在第一个查询之后立即调用第二个查询,因为SQL_CALC_FOUND_ROWS不会在任何地方保存行数。 虽然此解决方案还需要两个查询,但速度要快得多,因为您只执行一次主查询。 您可以在MySQL文档中阅读有关SQL_CALC_FOUND_ROWS and FOUND_ROWS()的更多信息。

编辑:您应该注意,在大多数情况下,运行查询两次实际上比SQL_CALC_FOUND_ROWS更快。见here