根据时间间隔检索记录列表(PHP / MySQL)

时间:2010-11-29 15:27:34

标签: php mysql cron

在我的数据库表中,我有一个名为'start_datetime'的DATETIME字段。

时间部分始终以5分钟的间隔存储,没有秒数,例如:15:25:00或12:10:00或17:30:00

现在我需要设置一个CRON任务,它将在'start_datetime'前两天准确发送一封电子邮件。

这里有几个问题:

1)首先,我需要使用'start_datetime'查找所有记录,该记录正好在NOW之前2天(即运行查询的时间)

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

那么解决这个问题的最佳方法是什么?

3 个答案:

答案 0 :(得分:1)

它是否真的非常重要,它可以准确到5分钟的时间间隔,或者是否可以提前发送电子邮件至55分钟?

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

查询看起来像这样:(快速脏,未经测试)

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

答案 1 :(得分:0)

由于你每小时只能运行一次cron,那么你只能选择发送所选值的电子邮件WHERE start_datetime在2天2天1小时之间,或者你可以设置一个web服务每隔5分钟从你自己的电脑用cron打电话,但不建议。

答案 2 :(得分:0)

您的提供商是否允许无限制的脚本执行时间?如果是这样,您可以创建一个脚本,通过sleep函数每五分钟查询一次数据库。

功能:

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

伪代码:

function query_db() {
  //query code
}

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