我正在建立一个任务系统,它有4个表:
任务

id | user_id | end_date
-------------------------
2  | 1       | 2011-02-10

用户
id | username
--------------
1  | johndoe
--------------
2  | janedoe

角色
id | role_name
--------------
1  | coordinator

和任务用户
id | task_id | user_id | role_id
---------------------------------
1  | 2       | 2       | 1

每个任务都有一个创建者(即:johndoe是task#2的所有者),并且每个任务都有多个在该任务上具有不同角色的用户,在我的示例中,“janedoe”是task#2协调器。
我一直在努力向“珍妮多”和“约翰多”展示他们有多少应该完成的任务,而我遇到了这个问题,因为“约翰多”在任务中不起作用,他只是任务的负责人。
我怎么能告诉他们两个都有一个任务要完成呢?

最佳答案

您可以通过执行LEFT JOIN

SELECT u.id, u.username,
    IFNULL(t.Cnt,0) OwnCount,
    IFNULL(tr.Cnt,0) RoleCount
    IFNULL(t.Cnt,0) + IFNULL(tr.Cnt,0) TotalCount
FROM users u LEFT JOIN (
    SELECT user_id, COUNT(*) cnt
    FROM tasks
    GROUP BY user_id
  ) t ON u.id = t.user_id
  LEFT JOIN (
    SELECT user_id, COUNT(*) cnt
    FROM tasks_roles_users
    GROUP BY user_id
  ) tr ON u.id = tr.user_id
WHERE t.user_id IS NOT NULL OR tr.user_id IS NOT NULL

关于php - MySQL计数并加入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4982372/

10-10 16:49