繁体   English   中英

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

[英]Retrieve a list of records based on time intervals (PHP/MySQL)

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

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

现在,我需要设置一个CRON任务,该任务将在“ start_datetime”的前两天发送一封电子邮件。

这里有几个问题:

1)首先,我需要使用“ start_datetime”查找所有记录,该日期恰好是现在的2天(即运行查询的时间)

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

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

准确到5分钟间隔真的重要吗,还是可以提前55分钟发送该电子邮件,这是否可以接受?

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

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

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

由于您只能每小时执行一次cron,因此唯一的选择就是发送所选值的电子邮件,而start_datetime在2天2天1小时之间,或者您可以设置一个Web服务,每次距离您自己的个人电脑只有5分钟的路程,但不建议这样做。

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

功能:

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

伪代码:

function query_db() {
  //query code
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM