2014-01-17 195 views
0

我一直在玩Idiorm,我無法讓它從今天和昨天的數據庫中獲取所有記錄。 因此,MySQL的查詢是:Idiorm查詢得到今天的記錄

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

並使用where_raw,例如 - > where_raw('added_date> NOW() - INTERVAL 24 HOUR') – wesamly

回答

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。

+0

嗨Ollie! 謝謝,對於像我這樣的db新手來說,這是一條非常有用的建議! 但不幸的是,我無法解決我的問題。查詢是好的,我狡猾的問題是在Idiorm的某個地方。這就是我做的: $ events = ORM :: for_table('video') - > where_lt('time_stamp','CURDATE()') - > where_gte('time_stamp','CURDATE() - INTERVAL 1 DAY') - > find_many(); – heuels

+0

我對idiorm不太瞭解。但是,也許你應該嘗試......' - > where_raw('time_stamp> = CURDATE()+ INTERVAL 1 DAY') - > where_raw('time_stamp

+0

非常感謝,它解決了我的問題! – heuels