mysql - 更新任务状态,所有执行者将其标记为已完成

标签 mysql sql mysql-workbench

schema

我需要为我的应用程序制作一个 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/

相关文章:

php - 如何连接这3种编程语言?

php - UTF8 mysql 编码数据库,但在 PHP 中不显示特殊字符

sql - 对象的更新权限被拒绝

MySQL 将系统函数调用解释为架构函数调用(错误代码 1305 : Function does not exist)

mysql - Coldfusion 和 mySQL - 寻求通用和异地备份策略的建议

php - 如何使用 mysql 中的数据从微调器中获取选择的 ID

sql - 使用 LIKE (SQL) 连接表

MySQL View 优化与子查询

MySQL-获取每分钟的记录数

mysql - MYSQL 中 DOWN 和 UP 事件之间的时间戳差异,但 UP 和 DOWN 事件之间的时间戳差异