按月分组记录

时间:2013-01-18 15:07:54

标签: php mysql

我希望显示按月分组的一堆记录的数量,月份和年份。我使用以下查询,然后使用PHP来显示数据。

SELECT COUNT(*), YEAR(award_date) AS award_date_year, MONTH(award_date) AS award_date_month
FROM projects_sell
GROUP BY YEAR(award_date),MONTH(award_date) ASC

使用以下查询并使用PHP从日期时间中提取月份和年份会更好吗?我非常倾向于这样做,我将解释我对“更好”的解释。我一次只显示100条记录,所以只要两种解决方案合理接近,速度就不成问题。我的主要原因是因为我有时也将award_date显示为格式化日期,我希望使用PHP而不是MySQL格式化日期,并希望将所有格式保存在一个位置。我不使用这种方法的唯一原因是,如果award_date不属于给定的月/年,或者没有在award_date上使用某种聚合函数会导致某种问题。

SELECT COUNT(*), award_date
FROM projects_sell
GROUP BY YEAR(award_date),MONTH(award_date) ASC

2 个答案:

答案 0 :(得分:0)

由于年份和月份是从award_date中提取的,award_data将始终属于该年份和月份。

但是,由于您仅按年份和月份进行分组,因此MySQL可能会选择任何日期。因此,如果2012年5月每天都有奖励,则award_date可以是您在查询结果中的30个日期中的任何一个。没有办法告诉它会是哪一个。

所以我认为在查询中返回年份和月份比较干净,因为查询结果仅基于那些而不是确切的日期。

答案 1 :(得分:0)

使用PHP DATE()并存储通过该函数的值。

<?php
function myAwardDate($myDate)
{
  echo date("Y/m/d",$myDate) . "<br>";
  echo date("Y.m.d",$myDate) . "<br>";
  echo date("Y-m-d",$myDate);
}
?>

将您的Award_Date字符串传递给此日期函数,然后您将获得任何日期格式。