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

より高度な設定の理由から、さらに一歩進んでいきたいと思います。

projectvisible合計AVGが100%の場合、のをtbl_projectsから1に更新したいと思い0ます。

もちろん、分離して2つのクエリを実行できます。しかし、1つのクエリの方がはるかに優れていると確信しています。このタイプの条件文は、私の経験を少し上回っています。私はそれに少し助けを探しています。

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 に答える