使用LIMIT时获取总行数?

可能重复:
用偏移+限制在mySQL查询中查找结果的总数

我有一个非常复杂的SQL查询返回分页的结果。 问题是获得总行数在LIMIT之前,我必须运行两次sql查询。 第一次没有限制条款获得总行数。 SQL查询是非常复杂的,我认为他们必须是一个更好的方式做到这一点,而无需两次运行查询。

幸运的是,自从MySQL 4.0.0以后,你可以在查询中使用SQL_CALC_FOUND_ROWS选项,它会告诉MySQL来计算不pipeLIMIT子句的总行数。 您仍然需要执行第二个查询来检索行数,但这是一个简单的查询,并不像查询检索数据那样复杂。 用法很简单。 在你的主查询中,你需要在SELECT之后添加SQL_CALC_FOUND_ROWS选项,而在第二个查询中你需要使用FOUND_ROWS()函数来获得总的行数。 查询将如下所示:

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

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

编辑:你应该注意,在大多数情况下运行查询两次实际上比SQL_CALC_FOUND_ROWS更快。 看到这里