我们正在制作一个完美的php电子邮件。
从数据库中选择所有用户并向他们发送电子邮件是很好的。
但是,由于我们有大量的电子邮件要发送,我们希望通过[1000]开始和暂停电子邮件的事务,以避免使服务器过载。
的例子:
选择:1000;
暂停MYSQL
SELECT ANOTHER 1000;
暂停MYSQL
等。
我读到了START TRANSACTION, COMMIT &我想我实现的是正确的。
有人能帮我在ROLLBACK事务之前包含100秒的暂停吗?
我不知道该怎么办
我现在得到了什么[带前缀的代码].
max = 1000美元;
发送美元= 0;
$滚= false;
mysql_query("开始事务;");
$query = mysql_query("SELECT DISTINCT mail_id, customers_email_address newsletter WHERE ORDER BY mail_id ASC");
,(结果= mysql_fetch_array美元($查询){
如果($rollback == true){
$rollback = false;
mysql_query("回滚;");
}
[------发送邮件的脚本-----]
发送+ +美元;
if($max == $send){
mysql_query("承诺;");
$rollback = true;
}
}
欢呼Jay
这里根本不需要事务—您没有更新任何东西。实际上,事务的开销在这里是完全没有意义的,所以我建议您去掉它。
您可以简单地(理论上,您可以为此编写代码)
- 从数据库中选择前1000行:
SELECT ... LIMIT 0, 1000
- 将偏移量增加1000
- 选择后面的1000行:
SELECT ... LIMIT 1000, 1000
- 冲洗并重复,直到从查询中得到少于1000行。
请注意,为了使该方法工作,您需要以ASC顺序或其他方式order BY主键,以确保您不会两次获得相同的行。
所有你需要的是安排你的发件人脚本与cron,例如发送一些电子邮件。
它将发送超过N个电子邮件每M分钟和服务器将高兴;)
以下几个选项:
1)你可以实现Cronjob
2)有一个php的开源小应用程序PHPList,可以在几秒钟内集成。(我已经使用了这个,所以)
3)第三个选项,你可以使用php的sleep函数。(我不确定)