我有一系列新闻文章,存储在数据库中,如下所示:
id
articleTitle
articleBody
articleBy
category
dateEntered
我想要做的是选择所有文章,并按照输入的特定月份/年份对它们进行分组。例如:
我可以使用以下内容选择月份以及有多少项目:
SELECT id, articleTitle, YEAR(dateEntered) AS 'year', MONTH(dateEntered) AS 'month' FROM News GROUP BY YEAR(dateEntered), MONTH(dateEntered) DESC
每当我尝试输出' articleTitle'的内容时当只显示28个条目时,它只显示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子句添加更多表达式。另请注意,ASC
和DESC
适用于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