0

我按月和年列出所有新闻文章,以及该月发生了多少篇文章......

但是我注意到在新的一年里它只按月排序而不是

这是我的 SQL

$archive1_sql = "SELECT YEAR(`ndate`) AS 'year', MONTH(`ndate`) AS 'month', COUNT(`nid`) AS 'count'  FROM `weaponsnews` GROUP BY YEAR(`ndate`), MONTH(`ndate`) DESC";

它返回

December 2012 (1)
November 2012 (11)
October 2012 (6)
September 2012 (8)
August 2012 (16)
July 2012 (8)
June 2012 (6)
May 2012 (12)
April 2012 (4)
March 2012 (2)
February 2012 (4)
January 2013 (1)

我想要它做的是这样的

January 2013 (1)
December 2012 (1)
November 2012 (11)
October 2012 (6)
September 2012 (8)
August 2012 (16)
July 2012 (8)
June 2012 (6)
May 2012 (12)
April 2012 (4)
March 2012 (2)
February 2012 (4)

我怎么做?

4

3 回答 3

2

更改GROUP BY为:

GROUP BY YEAR(`ndate`) DESC, 
         MONTH(`ndate`) DESC

如果没有ORDER BY,MySQL 有一个(非标准 SQL)特性,它根据排序对结果进行GROUP BY排序。它还允许出现ASCandDESC关键字。

从 MySQL 文档SELECT语法

  • 如果使用GROUP BY,输出行将根据列进行排序,就GROUP BY好像ORDER BY对相同的列有一个。为了避免GROUP BY产生的排序开销,添加ORDER BY NULL

    SELECT a, COUNT(b) FROM test_table GROUP BY a ORDER BY NULL;
    
  • MySQL 扩展了该GROUP BY子句,以便您还可以在该子句中指定的列之后指定ASCDESC

    SELECT a, COUNT(b) FROM test_table GROUP BY a DESC;
    
于 2013-01-25T19:13:49.440 回答
2

也添加 DESC 和 YEAR

SELECT
  YEAR(`ndate`) AS 'year',
  MONTH(`ndate`) AS 'month',
  COUNT(`nid`) AS 'count'
FROM `weaponsnews`
GROUP BY YEAR(`ndate`) , MONTH(`ndate`)
ORDER BY YEAR(`ndate`) DESC , MONTH(`ndate`) DESC
于 2013-01-25T19:15:07.720 回答
2

要按(倒序)时间顺序获取您的记录,请使用“order by ndate DESC”:

SELECT
  YEAR(`ndate`) AS 'year',
  MONTH(`ndate`) AS 'month',
  COUNT(`nid`) AS 'count'
FROM `weaponsnews`
GROUP BY YEAR(`ndate`) , MONTH(`ndate`)
ORDER BY ndate DESC

然后你可以按你想要的任何东西(天,周......)进行分组,你不需要更改你的'order by'语句。

于 2013-01-25T19:32:51.320 回答