首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于unix时间戳的自动化电子邮件的最佳解决方案

问基于unix时间戳的自动化电子邮件的最佳解决方案
EN

Stack Overflow用户
提问于 2010-11-20 01:39:59
回答 1查看 105关注 0票数 0

表中有6个字段,称为eblasts。ID、message、drop_dead、warning1、warning2和due_date。drop_dead、due_date、warning1和warning2都是unix时间戳。如果该时间已过,我需要发送电子邮件。因此,我想从数据库中查找drop_dead日期(这将是发送电子邮件的最晚时间),看看它与当前时间的比较如何。如果它通过了drop_dead,那么什么也不做。如果它在drop_dead之前,那么它需要发送电子邮件。

在那封电子邮件中,我需要交叉引用另外2个表(联系人和公司)。联系人通过contacts表中的company_id列绑定到每个公司(一个公司可以有多个联系人)。我还有另一个表,里面有他们是否响应了(eblast_id,company_id,timestamp)。只有那些没有回复的人才需要收到电子邮件。

讲得通?有没有关于如何让它工作或者我应该从哪里开始的想法?我的大脑因为试图弄清楚这件事而焦头烂额。

这就是我到目前为止..。只需帮助将各个部分组合在一起/填补缺失的地方。

代码语言:javascript
复制
$timestamp = time();

$drop_dead = mysql_query("SELECT drop_dead, ID, warning_1 FROM eblasts") or die(mysql_error());

while ($row = mysql_fetch_array($drop_dead, MYSQL_NUM)) {
        $last_time[$row[1]] = $row[0];
        $last_time[$row[1]] = $row[2];
};

print_r($last_time);

foreach($last_time as $key => $value) {
    if($timestamp < $value){
        $final_email[] = $key;
        };
    };

if(){
    $find_franchise = mysql_query("SELECT * FROM franchisees") or die(mysql_error());
    while ($row = mysql_fetch_array($find_franchise, MYSQL_NUM)) {
        $franchise_id[] = $row[0];  
    }
    $find_responded = mysql_query("SELECT franchise_id FROM participation");
    while ($row = mysql_fetch_array($find_responded, MYSQL_NUM)) {
        $part_franchise[] = $row[0];    
    }
    $to_email_franchise_id = array_diff($franchise_id, $part_franchise);
}

提前谢谢。

-Adam

EN

回答 1

Stack Overflow用户

发布于 2010-11-20 02:24:57

看一下UNIX_TIMESTAMP MySQL函数:http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_unix-timestamp

简而言之:

代码语言:javascript
复制
SELECT * FROM `eblasts` WHERE `drop_dead` < UNIX_TIMESTAMP( NOW() );

不过,这种方法的缺点是,每次查询时都会重新计算时间戳,这将导致大量无用的系统调用。

这样会更有效率:

代码语言:javascript
复制
SET @cutoff = UNIX_TIMESTAMP( NOW() );
SELECT * FROM `eblasts` WHERE `drop_dead` < @cutoff;

但是,如果您的原始Unix时间戳(在数据库中的时间戳)直接来自PHP,我建议您使用PHP的time()函数计算截止时间,特别是如果您的MySQL服务器不在同一台物理机器上运行。这样,如果MySQL服务器的日期/时间(或时区)与您的web服务器的日期/时间不同,您就可以避免太晚发送消息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4227788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档