Idiorm查询获取今天的记录

时间:2014-01-17 15:37:12

标签: php mysql database date-range idiorm

我一直在玩Idiorm,我无法让它从今天和昨天的数据库中获取所有记录。 所以,MySQL查询是:

SELECT * FROM `video` WHERE DATE(`time_stamp`) = CURDATE()    # today
SELECT * FROM `video` WHERE DATE(`time_stamp`) = CURDATE() -1 # yesterday

如果我理解正确,它不能完全复制给Idiorm,对吧? 我也尝试了以下选项,奇怪的是没有用(返回空数组):

$today = ORM::for_table('video')->
        where_lt('time_stamp', 'CURDATE()')->
        where_gte('time_stamp', 'CURDATE()-1')->find_many();

请你纠正我应该怎么做?

1 个答案:

答案 0 :(得分:0)

最好是MySQL性能避免使用列值上的函数的东西。例如,

WHERE DATE(time_stamp) = CURDATE()   /* slow! */

完全无法使用索引来按time_stamp查找记录。它会导致全表扫描,它可以正常但缓慢地工作。你想要的是一个SQL表达式,它将生成索引范围扫描。这样做,对于今天日期午夜以来的所有time_stamp值。

WHERE time_stamp >= CURDATE()

如果要查找昨天的所有time_stamp值,则需要此SQL语句

WHERE time_stamp >= CURDATE() - INTERVAL 1 DAY
  AND time_stamp <  CURDATE()

也就是说,你希望所有时间戳都在[昨天午夜,今天午夜]的范围内,这个范围不包括今天的午夜。

我认为您的Idiorm代码的CURDATE() - INTERVAL 1 DAY表达式错误。 CURDATE() - 1适用于Oracle,但不适用于MySQL。