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

レコードを(逆の)時系列で取得するには、「ndateDESCによる順序」を使用します。

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

次に、必要なもの(日、週など)でグループ化できます。「orderby」ステートメントを変更する必要はありません。

于 2013-01-25T19:32:51.320 に答える
2

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
于 2013-01-25T19:15:07.720 に答える
2

を次のように変更GROUP BYします。

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

がない場合ORDER BY、MySQL には順序に従って結果を並べ替える (非標準 SQL) 機能がありますGROUP BYASCそこにandDESCキーワードも使用できます。

MySQLドキュメントのSELECT構文から:

  • を使用すると、出力行は、あたかも同じ列に対してがあるかのように、列GROUP BYに従ってソートされます。生成される並べ替えのオーバーヘッドを回避するには、次を追加します。GROUP BYORDER BYGROUP BYORDER 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 に答える