1

我创建了一个电子邮件程序,用于检查用户上次登录的时间,如果用户 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

所以这里例如马克和约翰尼4天没有登录。该事件第一次发生时它向他们发送电子邮件“你好”第二次事件发生时电子邮件发送者需要向他们发送“blabla”所以可以说马克没有登录 4 天,第一封电子邮件将发送然后他登录第 5 天,然后又过了 4 天,他没有登录,我想向他发送第二封电子邮件,该电子邮件将ID=2在表 2 上,该文件在 cron 上运行,每 2 小时检查一次有关如何操作的想法?我只需要这样做的方法,而不是我可以自己编写的实际代码,我一直在努力解决这个问题。

4

3 回答 3

1

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

于 2012-07-10T23:48:41.003 回答
1

我建议标准化您的数据集。例如,您可以有三个表:

ACCOUNT
LOGIN
NOTIFICATION

结构可能如下:

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

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

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

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

因此,您可能会在以下情况下发送电子邮件“blablah”:

LOGIN.TIMESTAMP <= today - 4 days
AND LOGIN.TIMESTAMP > MAX(NOTIFICATION.TIMESTAMP)
AND MAX(NOTIFICATION.TIMESTAMP) - 2NDLARGEST(NOTIFICATION.TIMESTAMP) BETWEEN 5 AND 30
于 2012-07-10T23:58:54.640 回答
0

Marc B 回答它是正确的,但您还需要向用户添加另一个日期时间列(即:last_email_sent)。因为你的 cron php 文件应该做的是检查自上次登录以来的天数,如果 last_email_sent>=4 天或者它为空,那么你发送 last_email + 1 并更新 last_email_sent(到今天的日期)和 last_email(到 last_email+1)。

于 2012-07-11T03:22:41.223 回答