我一直在玩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();
请你纠正我应该怎么做?
答案 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。