我有一张这样的表
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:00
,2014-01-20 08:54:00
时,我会得到上面的行,依此类推。
我已经可以获得start_date
和start_date + days
范围内的所有行'
SELECT
[fields..]
FROM
`table`
WHERE
`start_date` >= NOW() AND
`start_date` <= NOW() + INTERVAL `days` DAY
有关实现或更新我的数据库以解决此问题的逻辑的一些建议吗?
编辑:
Addede PHP
标签,所以,任何人都可以告诉我如何将逻辑从数据库传递到应用程序,如果在数据库中实现最初的想法很复杂。
答案 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;