更新任务状态,其中所有实施者将其标记为已完成

时间:2014-12-12 12:27:45

标签: mysql sql mysql-workbench

schema

我需要为我的应用程序创建一个cron脚本,它将更新任务的状态,所有表演者都已完成特定任务的工作。

UPDATE `tasks` SET status_id = 4 WHERE `id` IN (SELECT `task_id` FROM `task_user` WHERE __ALL PERFORMERS OF TASK HAVE STATE_ID = 2__)

“表演者”的role_id = 2且state_id从1(任务未完成)到2(任务完成工作)不等

请,帮助

1 个答案:

答案 0 :(得分:1)

您可以使用聚合和having子句来获取所需的ID:

UPDATE `tasks`
    SET status_id = 4
    WHERE `id` IN (SELECT `task_id`
                   FROM `task_user`
                   GROUP BY task_id
                   HAVING SUM(STATE_ID = 2) = COUNT(*)
                  );

表达式SUM(STATE_ID = 2)计算状态为“2”的每个task_user的{​​{1}}行数。 task_id说“所有人都有这种状态。”

编辑:

包括= COUNT(*)

role_id