在某些事情上挠头了一段时间,我似乎无法通过MySQL来解决这个问题。我有一张有记录的桌子。我想提醒客户,每个月,7天前,它的到期日。我有3个表,名为customers、events和event_reminders。
要描述这些表是干什么的:
Customers表--客户事件表的列表--事件创建时以及事件提醒表设置提醒的日期--发送提醒时的日期/时间列表。
我的思维过程是基于"reminder_day“字段(第1、第2、第3、第30)创建一个自定义日期,传入称为"reminder_day”的字段。然后执行-7天的间隔,并检查每个月的event_reminders表中是否存在这种情况。到目前为止,我的SQL语句如下:
SELECT c.customer_name, c.customer_email, REPLACE(e.reminder_day, RIGHT(e.reminder_day,2), '') as due_day
FROM customers c JOIN events e ON (c.customer_id = e.customer_id)
WHERE NOT EXISTS
(
SELECT 1 FROM event_reminders r
WHERE MONTH(r.reminder_date) != MONTH(CURRENT_DATE())
)上面的查询是检查event_reminders表,以检查客户事件的当前月份记录是否存在,但我需要它对间隔为-7天的due_day别名进行检查。
我希望某位天才能帮助我,这一点在我看来是明确的。非常感谢!
发布于 2017-03-10 15:26:36
数据库是存储数据的地方。应用程序是对数据进行操作的地方。
MySQL不能“发送电子邮件”或以其他方式到达外部。
所以..。我会让操作系统中每天的“cron”作业打开"events“表,读取所有行,计算需要提醒的人,发送电子邮件,并从表中删除过期的行。
如果表中只有数千个条目,这是相当容易管理的;如果您有数百万项,那么SELECT需要有某种方法来过滤掉大部分表,从而减轻应用程序的负担。
为了适应二月份,你可能想说“最后”而不是“30”。这可以计算为“前进1个月,然后备份1天”。或者,在MySQL,date + INTERVAL 1 MONTH - INTERVAL 1 DAY。
您对Event Reminders table的定义是令人困惑的--它是否是未来要发布的提醒列表?或者是一张过去的提醒清单。选一个。你似乎需要记住,你已经发出了提醒,所以我更喜欢这样。预先计算“未来”是不值得的(正如我已经指出的)。
https://dba.stackexchange.com/questions/166476
复制相似问题