关于php:按每年唯一月份分组,而不仅仅是月份

group by unique month per year, not just month

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
MySQL Query GROUP BY day / month / year

我有以下MySQL:

1
2
3
4
5
SELECT MONTH( FROM_UNIXTIME(  `timeStamp` ) ) as month , COUNT(  `id` )  as count
FROM  `discusComments`
GROUP BY MONTH( FROM_UNIXTIME(  `timeStamp` ) )
ORDER BY  MONTH( FROM_UNIXTIME(  `timeStamp` ) ) ASC
LIMIT 15

它获取过去15个月内每月的条目数量。我想知道为什么它只显示了过去12个月…然后我意识到这个数字是所有年份的总和,而不是每个月的唯一年份。因此,12月的价值可能是2012年和2011年的总和。

我不知道?我不想要这个。我想知道过去的15个月以及唯一月份年份的条目数量,例如2012年12月、2012年11月等。


我在这方面最直截了当的想法通常是将日期值的格式更改为一个唯一且能说话的字符串,比如2012年12月的2012-12和2011年10月的2011-10等等。

您可以使用的函数是DATE_FORMAT()

1
 DATE_FORMAT(FROM_UNIXTIME(timeStamp), '%Y-%m')

这些字符串很容易排序,例如,asc:

1
2
3
4
5
6
7
2011-10
2011-11
2011-12
...
2012-10
2012-11
2012-12

示例SQL查询:

1
2
3
4
5
6
7
SELECT
  DATE_FORMAT(FROM_UNIXTIME(timeStamp), '%Y-%m') as month,
  COUNT(id) as count
FROM  discusComments
GROUP BY month
ORDER BY month ASC
LIMIT 15


将year添加到您的SELECT列列表中,并将别名添加到GROUP BY

1
2
3
4
5
6
7
8
9
SELECT YEAR(FROM_UNIXTIME(`timestamp`))  AS year,
       MONTH(FROM_UNIXTIME(`timestamp`)) AS month,
       COUNT(`id`)                       AS count
FROM   `discuscomments`
GROUP  BY year,
          month
ORDER  BY year,
          month
LIMIT  15


试试这个

1
2
months_between(to_date ('2009/05/15', 'yyyy/mm/dd'),
                     to_date ('2009/04/16', 'yyyy/mm/dd'))