【问题标题】:SQL: Counting number of matching results when using a LIMIT querySQL:使用 LIMIT 查询时计算匹配结果的数量
【发布时间】:2010-02-16 16:19:26
【问题描述】:

假设我的 MySQL 数据库中的 users 表包含大量条目。

我需要遍历所有用户,但我想一次只执行块(即使用 LIMITOFFSET):

SELECT * FROM users LIMIT 100 OFFSET 200

是否可以知道查询中匹配的用户总数,但只返回 LIMIT 个?

也就是说,我是否可以提前知道用户总数,而无需单独查询?

【问题讨论】:

    标签: sql mysql count 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 扩展中也不可能。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-12-22
          • 1970-01-01
          相关资源
          最近更新 更多