Drupal 6 & Views 2 - DISTINCT 字段

Posted

技术标签:

【中文标题】Drupal 6 & Views 2 - DISTINCT 字段【英文标题】:Drupal 6 & Views 2 - DISTINCT field 【发布时间】:2010-11-04 11:20:44 【问题描述】:

我正在使用 Feeds 模块导入大量 Feed Item 节点。由于格式错误的提要文件,我得到了很多重复。我正在使用视图来显示这些节点,并且需要能够在“节点:发布日期”字段上添加 DISTINCT 过滤器,因此每个发布日期我只能得到 1 个结果。

我也将研究从源头上解决问题(我不想一开始就拥有所有这些重复项),但这本身就是一个有趣的问题 - 我找不到方法在节点 ID 以外的字段上添加 DISTINCT 过滤器(在视图的基本设置框中有它自己的选项)。

【问题讨论】:

【参考方案1】:

我发现了一篇很棒的文章,介绍了在视图执行之前更改从视图生成的 SQL 查询的好方法:http://echodittolabs.org/blog/2010/06/group-views。我用它基本上在查询末尾添加了一个 GROUP BY 子句(以一种非常好的、干净和通用的方式)。

顺便说一句,我还找到了一种方法来解决导入大量重复提要项目的问题,详细信息在这里:http://drupal.org/node/661314#comment-3667228。它采用了相当极端的方法(在每次更新之前删除所有项目),但对于一些讨厌的格式错误的提要,这是唯一的解决方案。

我一直坚持要让你做到这一点的 Views 的一些未被发现的功能,但我认为没有 - 可能在下一个版本中;)

【讨论】:

【参考方案2】:

有两种方法可以解决这个问题:\

申请this patch

hook_views_query_alter => 粘贴

$query->distinct = 1;$query->no_distinct = 'views_groupby';

【讨论】:

【参考方案3】:

我猜你有两个选择:要么在视图模板文件中添加一些逻辑以跳过重复项,要么实现 hook_views_query_alter() 以更改视图使用的查询,添加 DISTINCT 子句。

【讨论】:

感谢您的回复。我已经找到了使用 views_views_pre_execute() 的解决方法,请参阅 echodittolabs.org/blog/2010/06/group-views。使用 Views UI 无法做到这一点似乎很奇怪......【参考方案4】:

我们在 drupal 6.x 视图中发现了这个问题 - 150 个项目中有 7 个重复了一两次。不知道为什么。问题仅针对匿名用户出现。幸运的是,views 6.x.2.16 在基本设置下提供了一个 'distinct' 设置,我将其设置为 Yes 并去掉了重复项。

【讨论】:

以上是关于Drupal 6 & Views 2 - DISTINCT 字段的主要内容,如果未能解决你的问题,请参考以下文章

Drupal 6.x中的hooku viewsu postu render

如何在 Drupal 6 - Views 2 中获取相当高级的关系?

钩子视图预渲染Drupal 6.x

Drupal 6 视图 2:PHP 片段

Drupal 6 视图 2:设置日期参数

2 寻呼机在视图中 - Drupal 6