2013-03-22 99 views
1

我有2个表:MySQL的 - 子查询条件

tbl_projects tbl_projects_tasks

这是一个简单的任务管理界面。任务分配给项目。 我也有一个塔中,任务表内,称为percentage,它是一个整数字段。我把它从0 - 100,自然的百分比的原因。

此外,项目表里面我有叫另一列:projectpercentagedone

此列平均值有关的项目的所有任务。

下面是不平均(使用单个专案编号在我的例子)查询:我想更进一步,为更高级的设置原因

UPDATE `tbl_projects` SET 
`totaltasks` = (SELECT COUNT(taskid) AS T1 FROM `tbl_projects_tasks` WHERE projectid = 10), 
`projectpercentagedone` = (SELECT AVG(percentage) AS T2 FROM `tbl_projects_tasks` WHERE projectid = 10) 
WHERE projectid = 10 
LIMIT 1 

如果总AVG是100%,我想将的tbl_projects1更新为0

当然,我可以做2个查询的分裂。但我确信一个查询是更酷的。 这种类型的条件语句略高于我的经验。我正在寻找一些帮助。

回答

1

您可以简单地将tbl_projects加入子查询中,该子查询在tbl_projects_tasks上进行一些计算。

UPDATE tbl_projects a 
     INNER JOIN 
     (
      SELECT projectid, 
        COUNT(taskID) totalCount, 
        AVG(percentage) avgPercent 
      FROM tbl_projects_tasks 
      GROUP BY projectid 
     ) b ON a.projectid = b.projectid 
SET  a.totaltasks = b.totalCount, 
     a.projectpercentagedone = b.avgPercent, 
     a.projectvisible = IF(b.avgPercent = 100, 0, 1) 
WHERE a.projectid = 10 
+0

我明白你要去哪里了。您的查询得到我的SQL语法错误,但我调整吧..... – coffeemonitor 2013-03-23 16:15:54

+0

什么是产生这样我就可以修复查询确切的错误。 – 2013-03-23 16:16:52

+0

'#1064 - 你的SQL语法错误;检查对应于你的MySQL服务器版本在线路附近使用“COUNT(任务id)TOTALCOUNT,AVG(百分比)avgPercent”正确的语法手册5' 我已经改变它,只是要确定我没不要错过任何东西。对不起,延迟 – coffeemonitor 2013-03-23 17:58:57