嗨,我对每天凌晨 12:00 运行的 cron 作业的 mysql 查询中的日期逻辑感到完全困惑
我正在一个汽车列表网站上工作,其中汽车列表的有效期为 mysql 日期时间格式。
所有过期的列表将在过期日期后 7 天后从网站上删除
当 cron 作业将运行时,它会执行以下操作
任务 1 - 向用户发送电子邮件警报,告诉他们他们的列表已过期。
因此,我需要选择自上次运行 cron 作业以来已过期的所有列表,并且不包括在此之前的列表,以便每个列表仅发送一次过期警报电子邮件。
我尝试执行此任务的 sql 查询(再次与此混淆)
SELECT car_id FROM cars WHERE expiry_date > DATE_SUB(NOW(), INTERVAL 1 DAY) AND expiry_date < NOW()
任务 2 - 将向用户发送电子邮件警报,告诉他们列表将在 24 小时后被永久删除。
因此,我需要选择所有将在超过 24 小时 / 6 天后删除的列表,因为它们已过期,我需要确保它们至少有 24 小时的时间来更新它们。我还需要以这样一种方式选择/构建 sql 查询,即只选择那些将在 1 天内到期而不是其他的列表,以避免多次电子邮件警报而不是一次电子邮件警报
我为此任务尝试了以下 sql 查询(我完全对这个查询感到困惑)
SELECT car_id FROM cars WHERE expiry_date > DATE_SUB(NOW(), INTERVAL 7 DAY) AND expiry_date < DATE_SUB(NOW(), INTERVAL 1 DAY)
任务 3 - 删除所有过期超过 7 天的列表
我为此任务尝试了以下 sql 查询
SELECT car_id FROM cars WHERE expiry_date < DATE_SUB(NOW(), INTERVAL 7 DAY)
请帮助我完善所有 3 个查询,以便 cron 完全按照我的意愿工作。另外请告诉我它必须>=(大于或等于)或<=(小于或等于)
这是 sqlfiddle 表结构和几条记录(尽管它们尚未过期)
http://sqlfiddle.com/#!2/cfcdf
我将非常感谢您的帮助。