2012-09-08 34 views
0

我有一个系统,每天早上为我和我的客户发送电子邮件。这个过程通过访问我的网站,通过iframe自动触发。太多选择在第二 - Mysql

通常,我会收到两封相同的电子邮件。

简单的过程中,我一个MySQL数据库上创建的控制,这是如下:

运行此查询:

用于发送选择客户我的电子邮件

SELECT name, email FROM clients WHERE DATE_FORMAT(lastsend, '%d/%m/%y') <> DATE_FORMAT(now(), '%d/%m/%y') 

函数发送电子邮件

我使用vb.net for s结束电子邮件

表更新后的客户端发送的所有电子邮件

UPDATE clients SET lastsend = Now(); 

我需要一种方法来锁定下来,以防止同样的电子邮件被发送多次在同一天。

谢谢,

回答

1

你有什么是竞争条件。解决这个问题的方法有很多,比其他方法更强大。 “健壮”意味着保证永远不会有重复的电子邮件。

这里是一个简单的的方式。将第二个日期列添加到您的表中:SendStart。设置发送开始到现在()尝试发送电子邮件和WHERE子句更改为:

WHERE DATE_FORMAT(lastsend, '%d/%m/%y') <> DATE_FORMAT(now(), '%d/%m/%y') and 
     DATE_FORMAT(sendstart, '%d/%m/%y') <> DATE_FORMAT(now(), '%d/%m/%y') 

你仍然可以得到第一个查询和第二之间的竞争条件。但是,时间跨度要小得多,因此可能性要小得多。

最后,您将在发送邮件时以及是否发送邮件时记录(除非发送成功,否则不要设置lastsend)。您可以针对不成功的电子邮件进行批量报告和错误处理。

+0

很好的解释。 – Kermit

+0

谢谢Gordon Linoff。我会尝试做这个,然后发布结果。 –