2010-11-29 78 views
1

在我的数据库表中,我有一个名为'start_datetime'的DATETIME字段。基于时间间隔检索记录列表(PHP/MySQL)

的时间部分是基于5周分钟的间隔总是存储,没有秒,例如:十五点25分00秒或12时10分○○秒或17时30分〇〇秒

现在我需要设置CRON任务将在'start_datetime'前2天发出电子邮件。

有几个问题在这里:

1)所有我需要一个“start_datetime”这正是前2天现在看来找到的所有记录的第一个(即运行查询的时间)

2)它应该忽略任何超过或少于2天的记录。考虑到时间是基于5分钟的时间间隔,我只能假设CRON任务必须每5分钟运行一次?这可能是一个问题,因为我的托管服务提供商只允许CRON每小时运行一次。

那么最好的方法是什么?

回答

1

难道真的那么重要,它是精确到5分钟的间隔,或者它是可以接受的发送电子邮件提前55分钟?

如果是这样,您可以运行一个查询,选择将在下一个小时内击中该2天标记的所有记录。

查询会是这个样子:(快速ñ脏,未经测试)

SELECT * FROM table 
    WHERE CURRENT_TIMESTAMP >= DATESUB(startDate, INTERVAL 49 HOUR) 
    AND CURRENT_TIMESTAMP < DATESUB(startDate, INTERVAL 48 HOUR); 
+0

大声笑好点!我认为说实话不重要!那么这个SQL查询会是什么呢? – GSTAR 2010-11-29 15:51:43

0

由于您每小时只能运行一次cron,因此您只能选择发送所选值的电子邮件WHERE start_datetime是BETWEEN 2天,2天和1小时,或者您可以设置一个Web服务女巫会每5分钟从你自己的电脑用cron调用,但这不是推荐的。

0

您的提供程序是否允许无限的脚本执行时间?如果是这样,您可以创建一个脚本,每五分钟通过休眠功能查询数据库。

功能:

http://php.net/manual/en/function.sleep.php

伪代码:

function query_db() { 
    //query code 
} 

for($i = 1; $i <= 60; $i++) { 
    query_db(); 
    sleep(300); 
}