如果子查询条件如何,则mysql更新

时间:2015-09-02 03:11:47

标签: mysql sql

假设我有2个表

表1:用户

属性:id(int),expires_at(varchar),status(enum)

expires_at 可以是DATETIME,也可以是一个数字(此人可以执行的登录次数)。

状态可以是“有效”,“过期”,“过期”等。

表2:员工

属性:id(int),user_id(int),contract(enum)

合约可以是:“按时间顺序”或“固定次数”

如果“按时间顺序”,用户的expires_at将具有DATETIME值。

如果“固定次数”,用户的expires_at将具有数值为VARCHAR。

一种方法可能是在MySQL上创建预定事件,以便每天上午11:59,MySQL检查 expires_at 并将状态设置为过期或过期

我正在寻找类似的东西:

t1

表示“固定次数”合约,另一个类似查询为“按时间顺序”。问题是:上面的查询语法错误。

1 个答案:

答案 0 :(得分:2)

我相信你应该使用

SELECT user_id FROM staff

SELECT id FROM staff

尝试

UPDATE users 
    SET 
        status = 
            CASE
                WHEN expires_at < 10 AND expires_at > 0 THEN 'expiring'
                WHEN expires_at <= 0 THEN 'expired'
                ELSE status
            END
    WHERE 
        id IN (SELECT user_id FROM staff WHERE contract = "fixed number of times")
        AND status = 'active'