SQL:使用 LIMIT 查询时计算匹配结果的数量
Posted
技术标签:
【中文标题】SQL:使用 LIMIT 查询时计算匹配结果的数量【英文标题】:SQL: Counting number of matching results when using a LIMIT query 【发布时间】:2010-02-16 16:19:26 【问题描述】:假设我的 mysql 数据库中的 users
表包含大量条目。
我需要遍历所有用户,但我想一次只执行块(即使用 LIMIT
和 OFFSET
):
SELECT * FROM users LIMIT 100 OFFSET 200
是否可以知道查询中匹配的用户总数,但只返回 LIMIT 个?
也就是说,我是否可以提前知道用户总数,而无需单独查询?
【问题讨论】:
【参考方案1】:您可以在(几乎)一个查询中使用SQL_CALC_FOUND_ROWS
and FOUND_ROWS()
:
SELECT SQL_CALC_FOUND_ROWS * FROM users LIMIT 100 OFFSET 200;
SELECT FOUND_ROWS();
虽然您最终仍会得到两个结果集,但实际查询只执行一次,这样可以避免重复编码和可能浪费的一些 CPU 周期。
【讨论】:
【参考方案2】:很遗憾,没有。你需要做两个查询:一个是获取用户总数,另一个是获取单个页面的用户。
select count(*) from users;
select * from users limit 0,10;
【讨论】:
【参考方案3】:在 SQL 标准中是不可能的。我不太了解mysql
,但我认为即使在任何 SQL 扩展中也不可能。
【讨论】:
以上是关于SQL:使用 LIMIT 查询时计算匹配结果的数量的主要内容,如果未能解决你的问题,请参考以下文章