使用随机排序时如何删除重复项?


31

我创建了一个视图,在其中显示节点标题和徽标(cck字段)。在论据中,我通过了分类术语名称。

结果,一个节点显示2或3次。我已经在“查询”设置中选中了不同的复选框,但这也无法正常工作。我使用了随机排序,这似乎会导致重复。当我删除随机排序时,它可以正常工作。

如何在不禁用随机排序的情况下避免重复?


如果有人解释重复的原因和对策,那实际上会很好。有5个“可能”工作的解决方案仅是半最优的
n3rd

Answers:


19

您可以通过启用视图聚合设置来删除重复的记录来应用GROUP BY或DISTINCT。
1.进入和编辑您的视图
2.在高级»其他部分通过启用使用聚合:是
3.在FIELDS过滤条件部分,选择和应用聚合设置您或不同的想组的字段。


2
我有示例问题,我启用了使用聚合,并且在我的distinct字段中没有选择,应该在聚合类型中选择哪种类型?
优素福(Yusef)2013年

39

在视图中实现不同值的简单方法是进行以下操作:

  1. 去编辑你的视图
  2. 在高级»其他部分中,单击“查询设置”
  3. 选中“不同”复选框。

在我的问题中,我已经提到我已经选中了查询设置中的Distinct选项。
艾哈迈德

Eugene和Clive,这是工作,非常感谢分享。

8

使用Views实现不同值的简单方法是执行以下操作:

  1. 去编辑你的视图
  2. 在高级»其他部分中,单击“查询设置”
  3. 选中“不同”复选框。

您可以通过启用视图聚合设置来删除重复的记录来应用GROUP BY或DISTINCT。

  1. 去编辑你的视图
  2. 在高级»其他部分中,通过启用使用聚合:是
  3. 在“字段”或“过滤条件”部分中,选择并应用“聚合”设置,以对其进行分组或区分。

5

我知道这个问题已经得到解答,但是对于某些用途,这些解决方案不起作用。但是,在进行了一些研究之后,我发现了一种可以满足我的需求的解决方案。

我发现了一个非常有用的解决方法,可以解决此问题。我已将代码段发布到DropBucket。基本上,您实现了一个Drupal 7查询alter hook,它检查所有视图查询中是否有指定groupby子句和字段的查询注释。然后将groupby添加到SQL查询中。

/**
 *  Found this trick on theoleschool.com.
 *  
 *  Description: Allows the view developer to specify the query
 *  group by action in the query comments. Great way to force the
 *  removal of duplicates.
 *  
 *  Just go into your query comments and type in "groupby:" with
 *  that colon followed by the field you want to group by.
 * 
 *  Examples...
 *  groupby:node.nid
 *  groupby:file_managed_file_usage.fid
 * 
 *  Ref-Comment: http://theoleschool.com/comment/496#comment-496
 *  Ref-Article: http://theoleschool.com/blog/using-hookviewsalter-add-group-statement
 */
function mymodule_query_alter(QueryAlterableInterface $query) {
  if ($query->hasTag('views')) {
    static $count;
    $view =& $query->getMetaData('view');

    if (strstr($groupby = $view->query->options['query_comment'], 'groupby')) {
      list($action, $field) = explode(':', $groupby);

      if (strlen($field) > 0) {
        $query->groupBy($field);
      }
    }
  }
}

http://dropbucket.org/node/153

源引用在页面的注释中。


我想补充一点,DISTINCT的已知问题在Views 3.3及更高版本中无法正常运行。
Patrick

1
无需执行上述操作,您只需检查视图的名称,然后添加分组依据即可。
Potney Switters,2013年

效果很好。除此以外,这里的解决方案均
无济于事

4

我有同样的问题。最终,我通过安装Views Distinct模块解决了它。

视图中的关系或其他联接通常会创建“重复”结果。例如,具有多个值的字段的节点可以在“多值”字段中的每个值一次出现在“视图”中。这令人沮丧,并且Views UI中的“ DISTINCT” SQL查询选项实际上并未解决问题,因为结果行在技术上是不同的。Views Distinct旨在提供一种简单的GUI方法来删除或聚合这些“重复的”行。


0

多值日期字段存在问题。项目的输入与输入日期一样频繁。这里提到的其他解决方案都没有对我有用。但后来我发现了一个解决方案D6仍然工作在D7 那里

hook_views_pre_render(&$view)是魔术字。在该示例中,它仅限于一个特定视图的一个特定显示。希望能帮助到你。

function MYMODULE_views_pre_render(&$view) {
  $used_nids = array();

  if ($view->name == 'events') {

    if ($view->current_display == 'page_2') {

      foreach ($view->result as $row) {

        if (!in_array($row->nid, $used_nids)) {

          $new_view_result[] = $row;
          $used_nids[] = $row->nid;
        }
      }
      $view->result = $new_view_result;
    }
  }
}

编辑:不幸的是,如果设置了限制,则此视图将从视图中减去重复项的数量。如果有人可能为此找到解决方案,请发表评论!


0

不是唤醒旧线程,而是答案(如果使用Drupal 7和公开的搜索过滤器)是检查“搜索:搜索项”下的“删除搜索分数”。

在“过滤条件”下

添加“搜索:搜索字词”

选中“删除搜索分数”

点击“应用(所有显示)”

点击保存


0

这些方法都不适合我,但是Views Random Seed模块实际上可以解决问题。但是,我的问题与使用寻呼机有关。这是该模块的项目页面的引文:

添加带有种子的随机订单处理程序。如果在sql RAND()函数中指定了常量整数参数N,它将用作种子值,该种子值将产生可重复的列值序列。这样可以进行分页,而不会出现两次项目。还可以使用PHP计算自定义种子,从而允许您基于变量(例如日期)创建伪随机数。


0

我有多个,Date fields并希望按...的开头进行排序FIRST date。这是它的工作方式:在Views->advanced->Other: use aggregation: YES 然后: SORT CRITERIA->Aggregation settings->Aggregation type: COUNT

我希望count给我编号而不是实例编号,但是结果却截然不同...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.