首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算按日创建的内容项

计算按日创建的内容项
EN

Stack Overflow用户
提问于 2014-02-07 05:14:53
回答 2查看 1.2K关注 0票数 2

我需要创建一个视图,该视图将显示一个表,该表将显示在某一天创建的内容的计数,如下所示:

代码语言:javascript
复制
Date       Items
2014-2-1   2
2014-2-2   3
2014-2-3   7

我创建了一个带有聚合的视图,添加了以下字段:

  • "post date“使用自定义格式Y和”带状HTML标记“和”删除空白“,在重写结果部分启用。
  • 具有聚合类型= Count的"nid“

然后,我在Post date上添加了一个排序条件,粒度设置为"Day“,聚合类型设置为"Group”。不幸的是,我得到的结果是:

代码语言:javascript
复制
Date      Items
2014-2-1  1
2014-2-1  1
2014-2-2  1
2014-2-2  1
2014-2-2  1

我错过了什么?

EN

回答 2

Stack Overflow用户

发布于 2014-02-07 11:25:20

问题是您的视图正在运行的查询实际上如下所示:

代码语言:javascript
复制
SELECT node.created AS node_created, COUNT(node.nid) AS nid, DATE_FORMAT((DATE_ADD('19700101', INTERVAL node.created SECOND) + INTERVAL 0 SECOND), '%Y%m%d') AS node_created_day
FROM 
{node} node
WHERE (( (node.status = '1') AND (node.type IN  ('page')) ))
GROUP BY node_created, node_created_day
ORDER BY node_created_day DESC
LIMIT 10 OFFSET 0

它是按node_created字段分组的,这是一个时间戳。

你有两个选择:

1)安装视图日期格式SQL模块

2)应用这个补丁

这两种方法都更改了查询,因此日期实际上是用MySQL格式化的,然后将此值用于分组。

视图日期格式SQL模块将将查询更改为如下所示:

代码语言:javascript
复制
SELECT COUNT(node.nid) AS nid, DATE_FORMAT((DATE_ADD('19700101', INTERVAL node.created SECOND) + INTERVAL 0 SECOND), '%Y-%m-%d') AS node_created, DATE_FORMAT((DATE_ADD('19700101', INTERVAL node.created SECOND) + INTERVAL 0 SECOND), '%Y%m%d') AS node_created_day
FROM 
node node
WHERE (( (node.status = '1') AND (node.type IN  ('page')) ))
GROUP BY node_created, node_created_day
ORDER BY node_created_day DESC
LIMIT 10 OFFSET 0

这和Mike的解决方案有着同样的效果--但是需要另一个模块,所以我会用Mikes的答案来回答这个问题。

票数 1
EN

Stack Overflow用户

发布于 2014-02-07 10:46:29

更新:这曾经适用于我所拥有的版本。然而,对于某些人来说,情况似乎并非如此,所以我会把它留给别人,以防它对某人有帮助,但其他的答案可能会更好。

如果将“最小”聚合函数添加到“post date”中,确保将粒度设置保留在排序条件上,您将得到所需的结果。

添加“最小”聚合函数会改变生成的SQL查询对结果的分组方式。以下是之前和之后的内容:

代码语言:javascript
复制
SELECT node.created AS node_created, COUNT(node.nid) AS nid, DATE_FORMAT((DATE_ADD('19700101', INTERVAL node.created SECOND) + INTERVAL 0   SECOND), '%Y%m%d') AS node_created_day
FROM 
node node
WHERE (( (node.status = '1') AND (node.type IN  ('dummyNode')) ))
GROUP BY node_created, node_created_day
ORDER BY node_created_day DESC
LIMIT 10 OFFSET 0

vs

SELECT COUNT(node.nid) AS nid, MIN(node.created) AS node_created, DATE_FORMAT((DATE_ADD('19700101', INTERVAL node.created SECOND) + INTERVAL 0  SECOND), '%Y%m%d') AS node_created_day
FROM 
node node
WHERE (( (node.status = '1') AND (node.type IN  ('dummyNode')) ))
GROUP BY node_created_day
ORDER BY node_created_day DESC
LIMIT 10 OFFSET 0

您可以看到“组按node_created”被移除。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21619883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档