PHP MYSQLI - 选择按月分组的多行

时间:2015-05-28 13:16:47

标签: php mysqli

我有一系列新闻文章,存储在数据库中,如下所示:

id
articleTitle
articleBody
articleBy
category
dateEntered

我想要做的是选择所有文章,并按照输入的特定月份/年份对它们进行分组。例如:

  • 五月
    • 新闻第1条
    • 新闻第2条
    • 新闻第3条
  • 二月
    • 新闻第4条
    • 新闻第5条
    • 新闻第6条

我可以使用以下内容选择月份以及有多少项目:

 SELECT id, articleTitle, YEAR(dateEntered) AS 'year', MONTH(dateEntered) AS 'month'  FROM News GROUP BY YEAR(dateEntered), MONTH(dateEntered) DESC

每当我尝试输出' articleTitle'的内容时当只显示28个条目时,它只显示1个结果。

我的查询在哪里出错?

1 个答案:

答案 0 :(得分:2)

GROUP BY子句使用GROUP BY子句中的表达式的公共值折叠行集。在您的查询中使用此项:

GROUP BY YEAR(dateEntered), MONTH(dateEntered)

查询将仅返回单个行,以获取这些表达式的不同值。这样做没有错。如果要返回具有该年份和月份的行数,这很方便,例如

  SELECT DATE_FORMAT(dateEntered,'%Y-%m')
       , COUNT(1) AS cnt_
    FROM mytable 
   GROUP BY DATE_FORMAT(dateEntered,'%Y-%m')

如果您不希望自己的查询“崩溃”。行,然后不要使用GROUP BY子句。

我怀疑您要使用ORDER BY子句,而不是GROUP BY。要使命令以更确定的方式返回行,可以向ORDER BY子句添加更多表达式。另请注意,ASCDESC适用于ORDER BY子句中每个表达式。

例如:

SELECT n.id
     , n.articleTitle
     , YEAR(n.dateEntered)  AS `year`
     , MONTH(n.dateEntered) AS 'month'
  FROM News n 
 ORDER
    BY YEAR(n.dateEntered)  DESC
     , MONTH(n.dateEntered) DESC
     , n.id                 DESC