2012-07-10 96 views
1

我创建了一个电子邮件程序,用于检查用户最后一次登录的时间,如果用户在10天内没有登录,则发送给他/她一封电子邮件。 现在我希望系统检查同一用户是否做了两次,并通过电子邮件发送给他们不同的电子邮件。 表1用户:mysql/php电子邮件问题

id - name - loggedindate 
0 john  7/11/2012 
1 mark  7/6/2012 
2 johnny 7/6/2012 
3 bruce  7/2/2012 

表2邮件领域如下:

id - days -emailtosend - numberoftimeseventhappens 
0  4  hello     1 
1  4  blabla     2 
2  6  example    1 
3  3  to      1 
4  4  demonstrate   1 

所以这里例如标记和约翰尼didnt登录的4天。 第一次发生事件时发给他们电子邮件“你好” 第二次事件发生电子邮件发送者需要发送它们“blabla” 因此可以说标记不会登录4天,第一封电子邮件将会去 然后他在第5天登录,然后又过了4天他没有登录,我想给他发送第二封电子邮件,该电子邮件将在表2中ID=2 该文件在一个cron上运行,并检查每2小时 有关如何执行的任何想法它呢?我只需要这样做的方式,而不是我自己写的实际代码,我一直把我的头发拉过来。

回答

1

向用户表添加一个新字段,用于跟踪发送给他们的最后一种电子邮件类型。下一次你必须发送电子邮件,你发送“最后一封电子邮件+ 1”

+0

是的,我考虑过这个问题,但是文件运行在cron上,每2小时检查一次其他的东西和电子邮件......如果我这样做,那么在同一天他们将获得所有的电子邮件。 – cppit 2012-07-10 23:57:48

1

我会建议规范化你的数据集。例如,你可以有三个表:

ACCOUNT 
LOGIN 
NOTIFICATION 

结构可能是这样:

ACCOUNT 
----------------- 
ID | USER | EMAIL 

LOGIN 
----------------- 
ID | TIMESTAMP 

NOTIFICATION 
----------------- 
ID | TIMESTAMP 

现在你可以有一个关于这三张表上面的一个观点,即只显示,如果一个帐户ID上次登录时间戳> =今天 - 4天。此外,您可以从通知中获得计数,以查看您以前通过电子邮件发送过用户的次数,或者您可能希望执行一些操作,例如查看自上次通知发送以来经过了多少时间,如果发送时间为5天,则发送“blabla” ,但如果它超过了某个阈值,那么发送“你好”。

LOGIN.TIMESTAMP <= today - 4 days 
AND LOGIN.TIMESTAMP > MAX(NOTIFICATION.TIMESTAMP) 
AND MAX(NOTIFICATION.TIMESTAMP) - 2NDLARGEST(NOTIFICATION.TIMESTAMP) BETWEEN 5 AND 30 
0

马克b应答它是正确的,但还需要另外一个DateTime列添加到用户:

所以,你可能会以电邮“blablah”(即:last_email_sent)。 因为你的cron php文件应该做的是检查自上次登录以来的多少天,如果last_email_sent> = 4天或它为空,那么你发送last_email + 1并更新last_email_sent(到今天的日期)和last_email(last_email + 1)。