我需要为我的应用程序制作一个 cron 脚本,它将更新任务状态,其中所有执行者都已完成其特定任务的工作。
更新`任务`
设置状态 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(任务工作已完成)变化
请帮忙
最佳答案
您可以使用聚合和 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)
计算 task_user
中每个 task_id
状态为“2”的行数。 = COUNT(*)
表示“所有人都具有此状态。”
编辑:
要包含role_id
:
UPDATE `tasks`
SET status_id = 4
WHERE role_id = 2 AND
`id` IN (SELECT `task_id`
FROM `task_user`
WHERE role_id = 2
GROUP BY task_id
HAVING SUM(STATE_ID = 2) = COUNT(*)
);
关于mysql - 更新任务状态,所有执行者将其标记为已完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27443677/