1

我有 2 张桌子:

tbl_projects tbl_projects_tasks

这是一个简单的任务管理界面。并将任务分配给项目。我在任务表中还有一个列,称为percentage,它是一个整数字段。我确实保留它0- 100,自然是出于百分比原因。

此外,在 Projects 表中,我还有另一列名为:projectpercentagedone

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

这是进行平均的查询(在我的示例中使用单个 projectid):

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%,我想将from更新projectvisible为。tbl_projects10

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

4

1 回答 1

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 
于 2013-03-22T16:58:50.777 回答