数据库条目被删除

时间:2016-08-19 06:41:56

标签: php mysql sql

我有下面的脚本,用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的数据类型为intexpiry的数据类型为datetime

2 个答案:

答案 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。