MySQL PHP - 按天/月/年分组结果?

时间:2012-05-08 09:34:56

标签: mysql date group-by sql-order-by

我有一个表(Logs),其中记录了我的服务器上发生的事情,我想创建一个函数来对我得到的结果进行排序。为了更好地解释:

我的查询是。

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

(cur_timestamp是我的日志表中的一个字段,记录插入的时间戳)
($ user是用户名(先前设置))

这将按照降序顺序返回所有记录中的数组。 现在我想要做的是查询数据库并使其仅返回某一天或某月内的记录等,例如,如果用户选择一个月,我希望它仅返回所有记录那个月。

我一直在努力研究要做什么,事情似乎指向我使用GROUP BY技术,除了这只返回一个结果。我不太确定。任何帮助,将不胜感激!谢谢!

2 个答案:

答案 0 :(得分:3)

示例(登录Januar 2012):

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

答案 1 :(得分: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