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