Php 在数据库中存储要执行的操作,还是根据代码决定?
我有一个网站,我想在顾客买东西后的几天内给他们发送一些后续电子邮件。我现在想知道怎么做。我认为有两种选择:Php 在数据库中存储要执行的操作,还是根据代码决定?,php,database,email,cron,structure,Php,Database,Email,Cron,Structure,我有一个网站,我想在顾客买东西后的几天内给他们发送一些后续电子邮件。我现在想知道怎么做。我认为有两种选择: 在数据库中创建一个表,在其中存储我计划发送的电子邮件。因此,我只需存储客户的电子邮件地址和发送日期。然后,我只需每天运行cron,发送需要发送的电子邮件,并将表中的状态设置为“已发送”。这种方法的优点是我知道需要发送哪些电子邮件。缺点是我不够灵活;更改我发送电子邮件的天数并不容易,因为它们存储在数据库中 我还可以通过运行cron从代码中获取x天前购买物品的客户列表,向他们发送电子邮件,然后
我的问题其实是,;在这种情况下,最佳做法是什么?大多数网站是如何处理的?为什么?我会选择方法2 缺点并不是真正的缺点。假设您有一个“order”表,只需进行与cron使用的查询非常相似的查询,就可以获得要发送的邮件列表
但这是个人的选择。我不知道通常使用哪种方法。我会将这两种方法结合起来,这就是我在当前开发的系统中实际使用的方法 有一个“准备发送”列表对于记录和跟踪您的电子邮件非常有用,例如,如果您使用第三方电子邮件解决方案,并且您每月的电子邮件数量有限,您可以从您的程序中跟踪您的使用量,甚至可能触发自动“升级”如果您需要更多电子邮件,请在需要时使用该帐户 所需的灵活性可以通过为该表设计良好的模式来实现 您描述的解决方案将有一个类似的模式,因此我猜:
|---------|---------|------|---------|-------|
| send_to | subject | body | send_at | sent |
|---------|---------|------|---------|-------|
这确实不灵活,因为一旦插入数据库,为了更改send_at
列,您必须从订单中检索数据,并重新计算send_at
值
我提出这样一个模式:
|---------|---------|------|-----------|---------|-------|
| send_to | subject | body | added_at | send_in | sent |
|---------|---------|------|-----------|---------|-------|
更改是,send_at
列现在没有固定。当您运行cron
时,将仅检索与以下查询匹配的电子邮件:
!sent && added_at + send_in >= now
这将返回与使用以下命令查询第一个架构相同的结果:
!sent && send_at >= now
但是现在,您可以轻松更改电子邮件添加到队列和实际发送之间的等待时间。第一部分对我来说更好。您实际上不必创建另一个表来存储电子邮件和日期。只需在您已经创建的表中创建另一个日期列,例如,电子邮件应在10天后发送,只需将该部分编码在类似“提醒日期”的列中,并使其在cron中运行。对于电子邮件来说,如果您在会话中存储了每个用户的电子邮件,那么它就很容易了。您所要做的就是在电子邮件中写入$会话['email']以分手,登录用户的电子邮件将发送给相应的人