2010-02-16 108 views
3

说我的MySQL DB中的users表包含大量的条目。SQL:使用LIMIT查询时计算匹配结果的数量

我需要经过所有的用户,但我想这样做只是块在同一时间(即使用LIMITOFFSET):

SELECT * FROM users LIMIT 100 OFFSET 200

是否有可能知道的总数在查询中匹配的用户,但只返回它们的LIMIT数量?

换句话说,是否有可能提前知道用户的总数,而不进行单独的查询?

回答

4

可以在(几乎)一个查询做到这一点,利用SQL_CALC_FOUND_ROWS and FOUND_ROWS()

SELECT SQL_CALC_FOUND_ROWS * FROM users LIMIT 100 OFFSET 200; 
SELECT FOUND_ROWS(); 

虽然你仍然出现了两个结果集,实际的查询只执行一次,这样可以节省你的重复编码和可能会浪费CPU周期。

0

不幸的是没有。您需要执行两个查询:一个用于获取用户总数,另一个用于获取单个用户页面。

select count(*) from users; 
select * from users limit 0,10; 
0

在SQL标准中是不可能的。我不知道mysql很多,但我会认为即使在任何SQL扩展中也是不可能的。