Drupal Views使用关系时返回的重复值

时间:2010-03-24 16:28:42

标签: drupal drupal-6 views

我的观点有问题。我有一个观点,并且正在通过名称向其传递分类术语。然后我与相关节点建立了关系。对于我的输出字段,我将返回相关的标题和相关正文。但是我的结果有重复。我已经变得明显是肯定但是相信这是在返回节点而不是相关节点。我有什么想法可以删除重复项吗?

更新

以下是我只获得标题时运行的查询

SELECT DISTINCT(node.nid) AS nid,
    node_node_data_field_wine_company.title AS node_node_data_field_wine_company_title,
    node_node_data_field_wine_company.nid AS node_node_data_field_wine_company_nid 
FROM node node  
LEFT JOIN content_type_wine node_data_field_wine_company ON node.vid = node_data_field_wine_company.vid 
INNER JOIN node node_node_data_field_wine_company ON node_data_field_wine_company.field_wine_company_nid = node_node_data_field_wine_company.nid  
LEFT JOIN term_node term_node ON node.vid = term_node.vid INNER JOIN term_data term_data ON term_node.tid = term_data.tid 
WHERE term_data.name = 'test'
GROUP BY nid

看起来我应该按node_node_data_field_wine_company_nid进行分组,或者从那里选择不同的值。有什么想法吗?

更新

使用普通比赛可能无法实现。以下是我的设置。

我有一个名为Region的分类。区域将应用​​于名为Wine的自定义内容类型。 Wine内容类型具有公司节点类型的节点引用字段。 公司是自定义节点类型。

我有一个列出我所有地区的视图。单击该区域,我将其作为参数传递给视图(术语名称)。我希望从该地区返回该地区的所有公司。

为了得到这个,我需要获得具有该区域的所有Wine项目。随着区域的所有葡萄酒项目,我需要获得独特的公司节点参考。然后我会回来。

一种方法是给每个公司一个区域来制作清单。但是我宁愿它从葡萄酒类型中自动解决。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您的分析似乎是正确的,因为“不同”适用于“原始”节点,而不是相关节点。因此,您可以尝试“反转”您的视图构造,从现在的“相关”节点开始,添加与现在“原始”节点的关系,并根据这些节点的条款过滤结果。最后一点是我不确定的,因为我不知道是否可以在通过关系引入的节点上应用术语过滤器,但它可能值得一试。

如果通过“标准”视图功能无法获得所需结果,则可以使用各种选项来操作自定义代码中的视图,但这需要更详细的使用方案知识(例如,它是否需要使用寻呼机和类似工具)。如果看起来你需要走这条路线,你可以通过描述你需要完全达到的目标来增强你的问题。


编辑: 至于以编程方式操作视图的选项,您可以查看views module hooks。对于查询结果的小调整,可以实现hook_views_pre_render()并直接在$view->result中操作返回的结果集(即,在执行查询之后)。

但是,对于更大的操作(如在您的情况下),可以实现hook_views_query_alter()并在用于返回结果集之前调整实际查询。必须注意仅改变排序或过滤标准,但保持返回数据的一般结构(例如,它仍然需要包含视图所期望的所有字段)。虽然这种方法具有很大的灵活性,但需要注意的是,对于应用于视图的后续更改,它很脆弱 - 如果视图定义以改变构造查询的方式更改,则hook_views_query_alter()上的更改可能不会继续工作,或造成奇怪的结果。

每个视图都会触发视图挂钩,因此在应用任何更改之前,需要检查正确的视图(并最终显示)。