2011-10-03 230 views
0

我有一个叫做保留的表,它有列start_date和end_date。如何在不同条件下发送电子邮件提醒?

如果date_diff(start_date和end_date)是30,那么我需要在end_date之前8,2和1天发送一封电子邮件。同样与下面的..

60 - 15,4 120及以上 - 30,8,2 & 1 ... 任何想法如何做到这一点?

+0

如果1,2或8 – 2011-10-03 07:57:38

+0

使用DATEDIFF做结束日期和当前日期间办理入住手续的日期差异或浮动我可以检查DIFF的B/W日期的一个。但对不同的编码检查相同的东西没有意义。 – srinisunka

回答

0

设置cronjob做这种东西。

0

为您的查询编写3个单独的sql语句让这些工作。

然后把这些成的mysql_query在PHP如果行计数> 0

使用isset的可变进电子邮件的SMTP脚本

建立一个cron作业,检查每天早晨设定的变量。

+0

当你只需要一个时,不要做三个查询。 – 2011-10-03 08:07:17

0

SELECT *,DATEDIFF(CURDATE()日期,结束日期)作为DIFF FROM表,其中在(1,2,8)

+0

你是否仔细阅读了整个问题,因为我认为你错过了60和1的情况下的15,4&1,在120情况下错过了30,8,2&1。 – rahularyansharma

+0

你好Dagon,你的建议看起来很有帮助只有一个条件。但其他条件如何?我需要向所有人发送电子邮件提醒,所以我不确定是否可以针对每种情况编写单独的SQL查询。 – srinisunka

0

你可以做的是DATEDIFF(CURDATE()日期,结束日期)创建2个表, 1为主要预订信息,第二个为存储发送日期(或发送提醒日期)。

当保存记录时,您将检索当前日期和end_date之间的差异;如果差值为30,则必须在end_date之前8,2和1天存储send_dates;与其他条件相同。

然后创建一个cron作业(每天运行)来检查send_dates =当前日期的第二个表。如果符合条件,则发电子邮件。

希望这是你需要

+0

哪里是用于查找这些日期的sql代码?您是否错过了 – rahularyansharma

+0

,因为您在保存创建时保存发送日期,所以不需要sql代码。对于cron作业,您只需检查当前日期是否等于send_date。 SELECT tbl1。* FROM tbl2 INNER JOIN tbl1 on tbl2.tbl1_id = tbl1.id WHERE NOW()= tbl2.send_date – denil