MySQL比较行数以查看哪个用户在另一个表中有行

时间:2019-02-11 11:48:23

标签: php mysql laravel

我正在建立一个调查系统

  • 具有许多用户
  • 客户端
  • 一个用户可以有多个调查

客户端A可能有用户[1,2,3]。 现在有一个表格 user_completions ,其中显示了哪些用户完成了我的调查。

users table
+----+-----------+
| id | client_id |
+----+-----------+
|  1 |         1 |
|  2 |         1 |
+----+-----------+


user_completions table
+---------+-----------+
| user_id | survey_id |
+---------+-----------+
|       1 |         1 |
|       2 |         2 |
+---------+-----------+

如何(在一个查询中)查看user_completion表中有多少用户记录,并按调查分组,并且仅针对当前客户

所需的结果看起来像

+-----------+-------+-----------------------+
| survey_id | users | num_persons_completed |
+-----------+-------+-----------------------+
|         1 |     2 |         1             |
|         2 |     2 |         1             |
+-----------+-------+-----------------------+

1 个答案:

答案 0 :(得分:1)

我认为您在问题中缺少几个表提及,但是如果您确实只有这两个表,则可以通过以下查询来实现:

select tmp.survey_id, count(distinct tmp.user_id) completed, 
      (select count(distinct id) from users where client_id = 1) users
from
(select t1.*, t2.*
from users t1 
join user_completions t2
on t1.id = t2.user_id
where t1.client_id = 1
)tmp
group by tmp.survey_id