【问题标题】:How do I use a MySQL subquery to count the number of rows in a foreign table?如何使用 MySQL 子查询来计算外部表中的行数?
【发布时间】:2010-05-11 16:26:59
【问题描述】:

我有两张桌子,usersreports。每个用户没有、一个或多个与之关联的报告,reports 表有一个user_id 字段。

我有以下查询,我需要向每一行添加用户拥有多少报告的计数:

SELECT *
FROM users
LIMIT 1, 10

我是否需要使用子查询,如果需要,我怎样才能有效地使用它? reports 表有成千上万行。

【问题讨论】:

    标签: php mysql subquery


    【解决方案1】:

    不需要子查询:

    SELECT users.user_id, COUNT(reports.user_id) AS number_of_reports
    FROM users
    LEFT JOIN reports ON users.userid = reports.userid
    GROUP BY users.user_id
    

    为了提高查询效率,请确保两个表中的 user_id 字段都有索引

    评论跟进: COUNT 函数不计算空值,因此对于根本没有报告的任何用户,它将返回 0(如预期的那样)(连接将为 reports.user_id 返回 NULL)。还添加了 GROUP BY 位,第一次忘记了。

    【讨论】:

    • +1 和评论以确保这会吸引零报告用户。如果报告方提供 NULL,可能需要一个声明来表示“0”?
    • 这正是我需要的类似的东西
    【解决方案2】:
    SELECT users.userid,
           SUM( IF( Reports.userid > 0, 1, 0 )) as TotRpts
       FROM 
           users LEFT JOIN reports
              ON users.userid = reports.userid;
       GROUP BY
           users.userid
    

    您可能需要将 IF() 更改为

      IF( Reports.UserID is null, 0, 1 )
    

    【讨论】:

      猜你喜欢
      • 2017-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-02
      • 2012-01-05
      • 2010-10-11
      相关资源
      最近更新 更多