2011-06-27 14 views
3

我通常可以做到這一點,但它似乎我的大腦現在不能正常工作,我錯過了一些東西。試圖選擇昨天插入的mysql行數

通過cron作業每天是凌晨1點運行,我想拿到插入昨天行的計數和日期

SELECT DATE(added) as date, COUNT(*) FROM bookings WHERE added = DATE_SUB(NOW(), INTERVAL 1 DAY) GROUP BY date 

'添加' 包含時間戳即 '2011-04-18 12點31分31秒'

什麼我收到錯在這裏?我知道有昨天增加了許多行,但我的查詢返回0的結果並沒有mysql_errors :(

任何想法?

+0

字段ADDED的數據類型是什麼? – heximal

+0

類型是時間戳 – willdanceforfun

回答

10

請嘗試

SELECT DATE(added) as yesterday, COUNT(*) FROM bookings WHERE DATE(added) = DATE(DATE_SUB(NOW(), INTERVAL 1 DAY)) GROUP BY yesterday 

或許

SELECT DATE(added) as yesterday, COUNT(*) FROM bookings WHERE DATE(added) = DATE_SUB(CURDATE(), INTERVAL 1 DAY) GROUP BY yesterday 

更新 更正WHERE部分。

+0

謝謝。但''昨天''在'條'' – willdanceforfun

+0

''未知的列'雖然給了我想法包裝WHAT'添加'與DATE()即選擇日期(添加)作爲日期,COUNT(*)從預訂WHERE DATE添加)= DATE_SUB(CURDATE(),間隔1天)GROUP BY日期 – willdanceforfun

+0

好吧..我會嘗試運行它的一些數據我得到.. 2秒 – Phliplip

2

以及任何NOW()是將返回時間部分,除非它們在正是加入時間一天,他們不會被計數。

因此,無論之間使用的,並指定時間範圍內,或格式化要在查詢中只匹配在年月日部件的日期,而不是時間

+0

感謝這一點。如果我用CURDATE()替換NOW()不應該解決它嗎?我仍然得到0結果。面臨的挑戰是,這將是每天早上凌晨1點運行的cron作業,因此查詢需要動態。我該如何做一個始終以這種方法工作的BETWEEN? – willdanceforfun

+1

CURDATE仍然不等於已添加的值 CURDATE()!='2011-06-26 12:31:06「例如 – mikeq

+1

請查看DATE_FORMAT函數以將添加的值格式設置爲僅年度日或使用BETWEEN函數來指定增加值的範圍 在添加的時候使用DATE_FORMAT將意味着它不能使用任何索引來加快查詢速度,所以如果性能是好的,BETWEEN可能是一個更好的選擇關注 – mikeq

0

WHERE added =也只精確匹配NOW() - 1 DAY,您應該選擇一個範圍代替

+0

我看到...但不包括DATE()包裝'添加'從一個確切的時間戳到一個日期? – willdanceforfun

+1

不,因爲您沒有與DATE()的返回值進行比較,請參閱Phliplip的下一個答案 –