MYSQL 不按顺序返回日期


MYSQL Returns Date out of order

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

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

这是我的 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)

我该怎么做?

也添加带有 YEAR 的 DESC

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

GROUP BY更改为:

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

如果没有ORDER BY,MySQL有一个(非标准SQL)功能,它根据GROUP BY排序对结果进行排序。它还允许在那里ASCDESC关键字。

来自 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;
    

要按(反向)时间顺序获取记录,请使用"按日期排序":

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

然后,您可以按所需的任何内容(天,周...)进行分组,而无需更改"排序依据"语句。