2012-08-25 71 views
1

我需要从数据库的多个表中获取数据,并且需要使用1个查询。我遇到的麻烦是我需要计算每个项目有多少任务以及完成了多少任务。mySQL查询需要计数到一个字段为1的不同字段

我这些表:
项目:

id name  start_date   end_date    project_leader finished 
1  project_1 2012-08-01 00:00:00 2012-29-01 00:00:00 2     0 

用户

id username password email  status 
1  user_1  pass_1  email_1 1 
2  user_2  pass_2  email_2 1 

user_has_project

userid projectId 
1  1 

任务

id project description   end_date    user finished 
1 1  test description 1 2012-29-01 00:00:00 1  1 
2 1  test description 2 2012-29-01 00:00:00 1  0 

所以我需要做的,就是让一个查询,应该给我这样的结果:
通缉的结果:

project_id project_name start_date   end_date    project_leader finished  tasks  finished_tasks 
1   project_1  2012-08-01 00:00:00 2012-29-01 00:00:00 user_2   0    2   1 

我得到了它,直到工作我需要计算已完成任务的数量。到目前为止,我已经得到了这个查询,但它没有计算完成的任务。我怎样才能做到这一点?

查询:

SELECT projects.id, 
     projects.name, 
     projects.start_date, 
     projects.end_date, 
     projects.finished, 
     users.username AS project_leader, 
     COUNT(tasks.id) AS tasks 
FROM projects 
LEFT JOIN tasks ON (tasks.project = projects.id) 
JOIN user_has_project ON (user_has_project.projectId = projects.id) 
JOIN users ON (projects.project_leader = users.id) 
WHERE user_has_project.userId = 1 
GROUP BY projects.id 

回答

1

我一点点在这里跳枪(我将继续考虑在此情况下,肠道反应是错误的),但诀窍可能是使用了“ null if false“的评价计数()函数,它is documented to only count non-null values

SELECT projects.id, 
     projects.name, 
     projects.start_date, 
     projects.end_date, 
     projects.finished, 
     users.username AS project_leader, 
     COUNT(tasks.id) AS tasks, 
     COUNT(NULLIF(tasks.finished, 0)) as finished_tasks 
+0

好了,原来是很容易的实际。你我的谢意。 – DijkeMark

相关问题