【问题标题】:MySql count of group by result按结果分组的 MySql 计数
【发布时间】:2013-08-22 18:01:13
【问题描述】:

我正在尝试根据应用的搜索条件获取记录。一次我只选择 50 行(用于网页上使用的表格的分页)。但我还需要满足搜索条件的total 行数(以显示1-50 out of <total> records 等)。

以下查询按用户 ID 为我提供记录组。

select * from user 
group by userid
where name like '%hhh%' 
limit 50 offset 0

在这里,我将获得满足条件的前 50 条记录,但总搜索结果可能大于 50。我需要这个总数以及其他查询结果。

【问题讨论】:

  • 你需要分组做什么?我猜 userid 是主键,所以它应该是唯一的...

标签: mysql sql


【解决方案1】:

我会使用单独的查询:

select count(*) from user
group by userid
where name like '%hhh%'

您的查询会更快,并且可以在每次选择另外 50 行时运行一次,然后您可以运行一次运行时间较长的查询,以获得总数

【讨论】:

    【解决方案2】:

    试试这个查询..

    select count(*) as total,userid from users
    where name like '%hhh%' 
     group by userid limit 50 offset 0
    

    【讨论】:

      【解决方案3】:

      MySQL 通过 SQL_CALC_FOUND_ROWS 选项支持这一点。类似于以下内容:(改编自文档(但未经测试!)):

      mysql> SELECT SQL_CALC_FOUND_ROWS * FROM user
      -> WHERE name like '%hhh%' LIMIT 50;
      mysql> SELECT FOUND_ROWS();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-21
        • 1970-01-01
        • 2021-10-23
        • 2014-08-04
        • 2023-04-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多