Answers:
您可以通过启用视图聚合设置来删除重复的记录来应用GROUP BY或DISTINCT。
1.进入和编辑您的视图
2.在高级»其他部分通过启用使用聚合:是
3.在FIELDS或过滤条件部分,选择和应用聚合设置您或不同的想组的字段。
distinct
字段中没有选择,应该在聚合类型中选择哪种类型?
我知道这个问题已经得到解答,但是对于某些用途,这些解决方案不起作用。但是,在进行了一些研究之后,我发现了一种可以满足我的需求的解决方案。
我发现了一个非常有用的解决方法,可以解决此问题。我已将代码段发布到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
源引用在页面的注释中。
我有同样的问题。最终,我通过安装Views Distinct模块解决了它。
视图中的关系或其他联接通常会创建“重复”结果。例如,具有多个值的字段的节点可以在“多值”字段中的每个值一次出现在“视图”中。这令人沮丧,并且Views UI中的“ DISTINCT” SQL查询选项实际上并未解决问题,因为结果行在技术上是不同的。Views Distinct旨在提供一种简单的GUI方法来删除或聚合这些“重复的”行。
多值日期字段存在问题。项目的输入与输入日期一样频繁。这里提到的其他解决方案都没有对我有用。但后来我发现了一个解决方案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;
}
}
}
编辑:不幸的是,如果设置了限制,则此视图将从视图中减去重复项的数量。如果有人可能为此找到解决方案,请发表评论!
这些方法都不适合我,但是Views Random Seed模块实际上可以解决问题。但是,我的问题与使用寻呼机有关。这是该模块的项目页面的引文:
添加带有种子的随机订单处理程序。如果在sql RAND()函数中指定了常量整数参数N,它将用作种子值,该种子值将产生可重复的列值序列。这样可以进行分页,而不会出现两次项目。还可以使用PHP计算自定义种子,从而允许您基于变量(例如日期)创建伪随机数。