我制作一个每小时运行一次的cronjob,检查数据库中是否有当前时间内的时间戳字段。
即。如果脚本在13:00运行,并且有一个13:45的时间戳字段,它将找到它。
目前,我正在考虑使用当前日期获取所有时间戳,然后从当时获得前2个字符并将其与当前时间进行比较,但我希望有更多的内置时间这样做的方法?
答案 0 :(得分:2)
作为其标记的mysql我只能猜测一个SQL查询:
SELECT foo from bar WHERE HOUR(your_time_field) = HOUR(CURTIME()) AND DATE(field) = CURDATE()
Mysql函数:
答案 1 :(得分:1)
以下看起来有点复杂,但实际上这是一个很好的方法:
where field >= FROM_UNIXTIME(floor(UNIX_TIMESTAMP(now()) / (60 * 60))) and
field < date_add(FROM_UNIXTIME(floor(UNIX_TIMESTAMP(now()) / (60 * 60))), interval 1 hour)
复杂的表达式正在做的是找到当前和下一个小时的开始。这种方法的优点是它可以利用field
上的索引(如果有的话)。这会阻止全表扫描以获取更新的数据。
答案 2 :(得分:0)
$from = '2015-05-14 13:00:00';
$to = '2015-05-14 13:59:59';
. . .
"select * from users where created_at between $from and $to"
您应该忽略&#34; created_at&#34;的所有操作,例如&#34; hour(created_at)&#34;因为它会显着减慢查询的执行速度,因为引擎必须对循环中的所有记录应用此操作。此外,如果您有索引,则更有可能被忽略。
例如,您可以使用以下方式获取当前小时的记录:
select * from users where created_at between date_format(now(), '%Y-%m-%d %H:00:00') and date_format(now(), '%Y-%m-%d %H:%i:%s')
MySQL非常聪明,可以计算&#34;&#34;之间的2个值。只有一次;还&#34; created_at&#34;它没有任何函数包装器,因此如果索引此字段,将使用索引。