mysql / php电子邮件问题

时间:2012-07-10 23:46:02

标签: php mysql sql

我创建了一个电子邮件程序,用于检查用户上次登录的时间,如果用户没有登录10天,则会向他/她发送电子邮件。 现在我希望系统检查同一个用户是否进行了两次,并通过电子邮件向他们发送不同的电子邮件。 表1用户:

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

所以这里例如mark和johnny没有登录4天。 该事件第一次发生时,它会向他们发送电子邮件“hello” 第二次事件发生时,电子邮件需要发送“blabla” 所以我们说标记没有登录4天,第一封电子邮件就会发送 然后他在第5天登录,然后在另外4天后他没有登录,我想在桌面2上发送第二封电子邮件ID=2 该文件在cron上运行,每2小时检查一次 关于如何做的任何想法?我只是需要这样做的方式,而不是我自己可以编写的实际代码,我一直在把头发拉过来。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

我建议您对数据集进行规范化。例如,您可以有三个表:

ACCOUNT
LOGIN
NOTIFICATION

结构可能如下:

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

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

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

现在,您可以拥有一个位于这三个表之上的视图,如果上次登录时间戳> =今天 - 4天,则只显示帐户ID。此外,您可以从通知中获取计数,以查看您之前通过电子邮件发送给用户的次数,或者您想要检查自上次通知发送以来已经过了多少时间,如果是5天则发送“blabla” ,但如果超过某个阈值,则发送“hello”。

所以你可以在以下时间发送电子邮件给“blablah”:

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

答案 2 :(得分:0)

Marc B回答它是正确的,但您还需要向用户添加另一个datetime列(即:last_email_sent)。 因为你的cron php文件应该做什么,所以检查自上次登录后多少天,如果last_email_sent&gt; = 4天或者它为null,则发送last_email + 1并更新last_email_sent(到今天的日期)和last_email(到last_email + 1)。 / p>