计算按天创建的内容项

时间:2014-02-07 05:14:53

标签: drupal views

我需要创建一个视图,显示一个表格,显示在特定日期创建的内容项目数,如下所示:

Date       Items
2014-2-1   2
2014-2-2   3
2014-2-3   7

我使用聚合创建了一个视图,添加了以下字段:

  • “发布日期”,自定义格式为Y-m-d,并在“重写结果”部分启用“剥离HTML标记”和“删除空格”。
  • “nid”,聚合类型=计数

然后我在发布日期添加了排序条件,其粒度设置为“日”,聚合类型为“将结果组合在一起”。不幸的是,我得到的结果是:

Date      Items
2014-2-1  1
2014-2-1  1
2014-2-2  1
2014-2-2  1
2014-2-2  1

我错过了什么?

2 个答案:

答案 0 :(得分:1)

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

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)安装Views Date Format SQL模块

2)申请this patch

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

视图日期格式SQL模块会将查询更改为:

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

这与迈克的解决方案效果相同 - 需要另一个模块,所以我会选择Mikes的答案......

答案 1 :(得分:0)

更新:这曾经适用于我的版本。然而,有些人似乎不是这样,所以我会留下它,以防它对某人有帮助,但其他答案可能更好。

如果您将“最小”汇总功能添加到“发布日期”,以确保按照排序条件保留粒度设置,您将获得所需的结果。

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

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

您可以看到'GROUP BY node_created'已删除。