假设我有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
表示“固定次数”合约,另一个类似查询为“按时间顺序”。问题是:上面的查询语法错误。
答案 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'