我有下面的脚本,用cronjob清理会话。
我想要清理超过40分钟无效的会话。 但如果他们有特定的user_id,他们应该持续1天。
这不起作用,我不明白为什么。有时,即使他们拥有user_id,他们也会被删除。
DELETE FROM session
WHERE
CASE
WHEN
user_id IN (3,4,5,6,7)
THEN
expiry < DATE_SUB(NOW(), INTERVAL 1 DAY)
ELSE
expiry < DATE_SUB(NOW(), INTERVAL 40 MINUTE)
END
user_id
的数据类型为int
,expiry
的数据类型为datetime
。
答案 0 :(得分:0)
将比较移到外面而不是在案例中进行:
DELETE FROM session
WHERE expiry < CASE
WHEN user_id IN (3,4,5,6,7) THEN DATE_SUB(NOW(), INTERVAL 1 DAY)
ELSE DATE_SUB(NOW(), INTERVAL 40 MINUTE)
END
答案 1 :(得分:0)
你必须使用CASE
吗?
它不会像这样简单:
DELETE FROM session
WHERE expiry < DATE_SUB(NOW(), INTERVAL 1 DAY)
OR
(expiry < DATE_SUB(NOW(), INTERVAL 40 MINUTE) AND user_id NOT IN (3,4,5,6,7))
通过这种方式,它会删除所有过期的1天加上那些过期的40分钟没有这些ID。