如何使用MySQL子查询来计算外表中的行数?

时间:2010-05-11 16:26:59

标签: php mysql subquery

我有两个表,usersreports。每个用户都没有,一个或多个与之关联的报告,reports表格中有user_id字段。

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

SELECT *
FROM users
LIMIT 1, 10

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

2 个答案:

答案 0 :(得分:3)

不需要子查询:

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 :(得分:0)

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 )