【问题标题】:MySQL PHP - group results by day/month/year?MySQL PHP - 按日/月/年分组结果?
【发布时间】:2012-05-08 09:34:55
【问题描述】:

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

我的问题是。

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

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

这会像往常一样按降序返回所有记录的数组。 现在我想做的是查询数据库并让它只返回某一天或某月内的记录等,例如,如果用户选择一个月,我希望它只返回所有记录那个月。

我一直在尝试研究该怎么做,并且事情似乎指向我使用GROUP BY 技术,但这只返回一个结果。我不确定。任何帮助,将不胜感激!谢谢!

【问题讨论】:

  • cur_timestamp的类型是什么?
  • 日期类型 eg: 2012-05-07 10:35:10

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


【解决方案1】:

示例(2012 年 1 月的日志):

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

【讨论】:

  • 这很好用!谢谢!另外,有什么方法可以轻松让它返回“最后”一个月或只返回“今天”?
  • 当然,使用cur_timestamp = CURDATE() :) 有关更多有用的功能,请参阅 MySQL 文档关于日期和时间功能,here
  • 您可以使用 php mktime() 函数获取上个月的时间戳,并使用此 awnser 的方法来使用该时间戳并获取结果。
【解决方案2】:

如果我正确理解您的问题,我认为您不需要 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

【讨论】:

  • 非常感谢这对您有很大帮助:D
猜你喜欢
  • 2014-04-27
  • 2015-12-09
  • 2017-04-14
  • 1970-01-01
  • 1970-01-01
  • 2012-02-03
  • 1970-01-01
  • 2011-01-21
  • 2011-03-22
相关资源
最近更新 更多