表中有6个字段叫做eblasts。 ID,message,drop_dead,warning1,warning2和due_date。 drop_dead,due_date,warning1和warning2都是unix时间戳。如果时间过去,我需要发送电子邮件。所以我想从数据库中查找drop_dead日期(这将是发送电子邮件的最新时间),看看它与当前时间的比较情况。如果它过去的drop_dead则什么都不做。如果它在drop_dead之前,那么它需要发送电子邮件。
在那封电子邮件中,我需要交叉引用另外两个表(联系人和公司)。联系人通过联系人表格中的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);
}
提前致谢。
- 亚当
答案 0 :(得分:1)
查看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服务器不同,您将避免发送消息太晚。