可能的重复:
使用 offset+limit 查找 mySQL 查询中的结果总数 https://stackoverflow.com/questions/5928611/find-total-number-of-results-in-mysql-query-with-offsetlimit
我有一个非常复杂的 sql 查询,它返回分页的结果。问题是要获取 LIMIT 之前的总行数,我必须运行 sql 查询两次。第一次不使用 limit 子句来获取总行数。 sql 查询确实很复杂,我认为它们一定是一种更好的方法来执行此操作,而无需运行查询两次。
幸运的是,从 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
不保存任何地方的行数。
尽管此解决方案也需要两个查询,但速度要快得多,因为您只需执行一次主查询。
您可以阅读更多有关SQL_CALC_FOUND_ROWS 和 FOUND_ROWS() http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#id2890708在 MySQL 文档中。
EDIT:您应该注意,在大多数情况下,运行查询两次实际上比SQL_CALC_FOUND_ROWS
. see here http://www.mysqlperformanceblog.com/2007/08/28/to-sql_calc_found_rows-or-not-to-sql_calc_found_rows/
2019 年编辑:
从 MySQL 8.0.17 开始,SQL_CALC_FOUND_ROWS 查询修饰符和随附的 FOUND_ROWS() 函数已弃用,并将在未来的 MySQL 版本中删除。
https://dev.mysql.com/doc/refman/8.0/en/information-functions.html#function_found-rows https://dev.mysql.com/doc/refman/8.0/en/information-functions.html#function_found-rows
推荐使用COUNT
instead
SELECT * FROM tbl_name WHERE id > 100 LIMIT 10;
SELECT COUNT(*) WHERE id > 100;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)