在日期和日期+ n天之间每n小时查找一行

时间:2014-03-16 04:09:48

标签: php sql date logic

我有一张这样的表

start_date          | days | hours
------------------------------------
2014-01-20 01:54:00 | 15   | 7

我需要获取所有行,例如从2014年1月20日开始到2014年2月4日结束,距离start_date的7个小时内。如果我每分钟执行一次脚本,例如,当日期和时间为2014-01-20 01:54:002014-01-20 08:54:00时,我会得到上面的行,依此类推。

我已经可以获得start_datestart_date + days范围内的所有行'

SELECT
    [fields..]
FROM 
    `table`
WHERE
    `start_date` >= NOW() AND
    `start_date` <=  NOW() + INTERVAL `days` DAY

有关实现或更新我的数据库以解决此问题的逻辑的一些建议吗?

编辑:

Addede PHP标签,所以,任何人都可以告诉我如何将逻辑从数据库传递到应用程序,如果在数据库中实现最初的想法很复杂。

1 个答案:

答案 0 :(得分:1)

因此,您希望表中的所有行都是日期后7小时的倍数。

我们的想法是在两个日期之间取得差异。然后取出时间和日期差异的差异,将所有内容转换为秒并进行一些模运算。我认为以下是这样的:

select t.*
from table t
where `start_date` >= NOW() AND
      `start_date` <=  NOW() + INTERVAL `days` DAY and
      mod(to_days(subtime(start_date, now())*3600 + timetosec(subtime(start_date, now())), 
          hours * 60 * 60
         ) = 0;