表中有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)。只有那些没有回复的人才需要收到电子邮件。
讲得通?有没有关于如何让它工作或者我应该从哪里开始的想法?我的大脑因为试图弄清楚这件事而焦头烂额。
这就是我到目前为止..。只需帮助将各个部分组合在一起/填补缺失的地方。
$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
发布于 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
简而言之:
SELECT * FROM `eblasts` WHERE `drop_dead` < UNIX_TIMESTAMP( NOW() );不过,这种方法的缺点是,每次查询时都会重新计算时间戳,这将导致大量无用的系统调用。
这样会更有效率:
SET @cutoff = UNIX_TIMESTAMP( NOW() );
SELECT * FROM `eblasts` WHERE `drop_dead` < @cutoff;但是,如果您的原始Unix时间戳(在数据库中的时间戳)直接来自PHP,我建议您使用PHP的time()函数计算截止时间,特别是如果您的MySQL服务器不在同一台物理机器上运行。这样,如果MySQL服务器的日期/时间(或时区)与您的web服务器的日期/时间不同,您就可以避免太晚发送消息。
https://stackoverflow.com/questions/4227788
复制相似问题