首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据日期在事件发生前7天提醒客户事件

根据日期在事件发生前7天提醒客户事件
EN

Database Administration用户
提问于 2017-03-07 19:09:30
回答 1查看 1.5K关注 0票数 0

在某些事情上挠头了一段时间,我似乎无法通过MySQL来解决这个问题。我有一张有记录的桌子。我想提醒客户,每个月,7天前,它的到期日。我有3个表,名为customers、events和event_reminders。

要描述这些表是干什么的:

Customers表--客户事件表的列表--事件创建时以及事件提醒表设置提醒的日期--发送提醒时的日期/时间列表。

我的思维过程是基于"reminder_day“字段(第1、第2、第3、第30)创建一个自定义日期,传入称为"reminder_day”的字段。然后执行-7天的间隔,并检查每个月的event_reminders表中是否存在这种情况。到目前为止,我的SQL语句如下:

代码语言:javascript
复制
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别名进行检查。

我希望某位天才能帮助我,这一点在我看来是明确的。非常感谢!

EN

回答 1

Database Administration用户

发布于 2017-03-10 15:26:36

数据库是存储数据的地方。应用程序是对数据进行操作的地方。

MySQL不能“发送电子邮件”或以其他方式到达外部。

所以..。我会让操作系统中每天的“cron”作业打开"events“表,读取所有行,计算需要提醒的人,发送电子邮件,并从表中删除过期的行。

如果表中只有数千个条目,这是相当容易管理的;如果您有数百万项,那么SELECT需要有某种方法来过滤掉大部分表,从而减轻应用程序的负担。

为了适应二月份,你可能想说“最后”而不是“30”。这可以计算为“前进1个月,然后备份1天”。或者,在MySQL,date + INTERVAL 1 MONTH - INTERVAL 1 DAY

您对Event Reminders table的定义是令人困惑的--它是否是未来要发布的提醒列表?或者是一张过去的提醒清单。选一个。你似乎需要记住,你已经发出了提醒,所以我更喜欢这样。预先计算“未来”是不值得的(正如我已经指出的)。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/166476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档