2013-05-03 30 views
0

我的數據庫中有referer記錄。所有記錄包括日期,點擊次數,卷軸,國家等。 在這裏,我成功地將引文記錄分組幷包括點擊次數,卷軸,國家等的平均值。但是,我也希望啓用日期範圍,如最近3天。mySQL - 如何整合這個「僅限最後3天」查詢

enter image description here

SELECT *, COUNT(*), COUNT(conv), AVG(clicks), AVG(scrolls), 
AVG(spent) FROM track where referid='".$memberr."' GROUP BY 
referer ORDER BY ".$sortby." desc limit 0,35 

如何集成這個過去三天中查詢上面我的mysql_query?

FROM_UNIXTIME(date,'%Y-%m-%d') > CURDATE() - INTERVAL 3 DAY 
+0

您的代碼很容易受到SQL注入。瞭解[*準備的語句*](http://j.mp/T9hLWi) – Kermit 2013-05-03 14:06:02

+0

您正在使用「GROUP BY」。 – Kermit 2013-05-03 14:06:36

+0

由於您有一個「GROUP BY referer」,因此'SELECT *,...'應該是'SELECT referer,...'。否則,你可能會得到錯誤的結果,就像@FreshPrinceOfSO指向的那樣。 – 2013-05-03 14:08:36

回答

4

很簡單的事情,你只需要添加另一個條件:

WHERE date >= DATE_SUB(CURDATE(), INTERVAL 3 DAY) AND date <= CURDATE() 
+0

謝謝。你的日期條件查詢和我的有什麼不同? – user198989 2013-05-03 14:19:22

+1

我很確定使用DATE_SUB會比簡單的減法更快(這個函數寫的是有原因的);)。你也需要把你的代碼中的減法放到括號中。 – 2013-05-03 14:20:56

+0

只是一個說明,如果你正在使用時間戳,那麼'curdate()'會給你潛在的不正確的答案。例如,如果今天(5月3日)是2359h,並且您使用了'date_sub(curdate(),間隔3天)',那麼您將從4月30日起獲得結果。這更像是4天。在001h進行的相同搜索將包含距離超過23小時的範圍內的數據。 所以,如果你想精確地使用3天,那就用'now()'代替。由於您使用時間戳收集的數據,「now()」似乎更合適。 – gillyspy 2013-05-03 14:43:45