2012-05-08 79 views
0

我有一個表(日誌),其中我保存我的服務器上發生的事情的日誌,我想做一個函數來對結果進行排序。更好地解釋:MySQL PHP - 按日/月/年分組結果?

我的查詢是。

SELECT * 
    FROM Logs 
    WHERE username = '$user' 
    ORDER BY cur_timestamp DESC 

(cur_timestamp是在我的日誌表中的字段,記錄插入的時間戳)
($ user爲用戶名(預先設定的))

這將返回數組像往常一樣的所有記錄按降序排列。 現在我想要做的是查詢數據庫,並讓它只返回某些日期或月份內的記錄等,例如,如果用戶選擇一個月,我希望它返回所有記錄只有那個月。

我一直在努力研究做什麼,似乎指向我使用GROUP BY技術,除了這隻會返回一個結果。我不確定。任何幫助,將不勝感激!謝謝!

+0

'cur_timestamp'的類型是什麼? – kapa

+0

這是一個日期類型例如:2012-05-07 10:35:10 – 8guadalupe8

回答

3

例(2012年Januar日誌):

SELECT * 
FROM Logs 
WHERE username = '$user' 
and cur_timestamp between '2012-01-01' and '2012-01-31' 
ORDER BY cur_timestamp DESC 

纔有了今天:

SELECT * 
FROM Logs 
WHERE username = '$user' 
and date(cur_timestamp) = curdate() 
ORDER BY cur_timestamp DESC 

如果你想從過去的特定時間直到現在你可以使用DATEADD

例(最近30天日誌):

SELECT * 
FROM Logs 
WHERE username = '$user' 
and date(cur_timestamp) >= DATE_ADD(curdate(), INTERVAL -30 DAY) 
ORDER BY cur_timestamp DESC 
+0

這工作很好!謝謝!另外,有沒有什麼方法可以輕鬆地讓它返回'最後'月份或僅'今天'? – 8guadalupe8

+0

當然,使用'cur_timestamp = CURDATE()':)有關更多有用的函數,請參閱關於日期和時間函數的MySQL文檔,[here](http://dev.mysql.com/doc/refman/5.5/zh-cn/date -and-time-functions.html#function_curdate) – Daan

+0

您可以使用php mktime()函數獲取上個月的時間戳,並使用此awnser的方法使用該時間戳並獲取結果。 – MakuraYami

0

如果我正確理解你的問題,我不認爲你需要GROUP BY,只是增加一個WHERE中一定要選擇所有日誌時間範圍

SELECT * 
FROM Logs 
WHERE username = '$user' 
AND cur_timestamp > '2010-01-01' 
AND cur_timestamp < '2012-12-01' 
ORDER BY cur_timestamp DESC 

您需要做的唯一事情就是調整日期範圍。不需要任何GROUP BY

+0

非常感謝這幫助:D – 8guadalupe8