【问题标题】:Retrieve a list of records based on time intervals (PHP/MySQL)根据时间间隔检索记录列表(PHP/MySQL)
【发布时间】:2010-11-29 15:27:33
【问题描述】:

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

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

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

这里有几个问题:

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

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

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

【问题讨论】:

    标签: php mysql cron


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 哈哈好点!我认为诚实并不重要!那么对此的 SQL 查询是什么?
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      功能:

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

      伪代码:

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

      【讨论】:

        猜你喜欢
        • 2014-02-15
        • 1970-01-01
        • 2019-04-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-12
        相关资源
        最近更新 更多