将内部连接更改为左侧连接3.3? -- 7 领域 和 views 领域 和 database 领域 drupal 相关 的问题

Changing an inner join to a left join in views 3.3?


7
vote

问题

中文

使用视图3.3,我在Drupal 7中有一个视图,其中我显示了两个内容类型。我基于仅附加到其中一个内容类型的字段的值的过滤条件。只要我拥有该字段标准,视图正在进行 INNER JOIN ,这导致它不会返回第一个内容类型的视图,这些类型没有附加该字段的第一个内容类型。

我从视图中复制查询,将 INNER 更改为 LEFT 加入,将其粘贴到mysql shell中,我收到了我预期的所有行得到。但我不知道如何在视图编辑器中进行这些更改。

我在观看编辑器上的"关系" 块中播放,但我没有看到我可以在哪里改变连接类型。

我能改变的观点3.3如何加入?

英文原文

Using views 3.3, I have a view in Drupal 7 where I am showing two content types. I have a filter criteria based on the value of a field that is attached only to one of the content types. So long as I have that field criteria, views is doing an INNER JOIN, which causes it not to return views of the first content type which doesn't have that field attached.

I copied the query from the view, changed the INNER to a LEFT join, pasted it into the mysql shell, and I got all the rows that I expected to get. But I don't know how to make those changes in the view editor.

I was playing around in the 'relationship' block on the view editor, but I didn't see where I could change the join type.

Am I able to change how views 3.3 does joins?

        
 
 

回答列表

19
 
vote

我找到了单击 reduce duplicates 复选框转换了我的 INNER JOINs LEFT JOINs

描绘减少重复标记标记

在我获得类似于下面注入我的查询的东西之前:

  INNER JOIN {field_data_field_random_field field_data_field_random_field}          ON node.nid = field_data_field_random_field.entity_id         AND (field_data_field_random_field.entity_type = 'node'         AND field_data_field_random_field.deleted = '0')   

这些内部连接是由简单的分类滤波器引起的,所以遗憾的是我没有任何关系与单一的关系。选中此框,但似乎没有以任何其他方式更改我的查询,保存以删除内部连接,这对我来说是完美的;并可以帮助其他别人在这个众多猴子冒险中叫做生命。

 

I found clicking on the reduce duplicates checkbox converted my INNER JOINs to LEFT JOINs:

depicting reduce duplicates tickbox

Before I was getting something akin to the following injected into my query:

INNER JOIN {field_data_field_random_field field_data_field_random_field}          ON node.nid = field_data_field_random_field.entity_id         AND (field_data_field_random_field.entity_type = 'node'         AND field_data_field_random_field.deleted = '0') 

These inner joins were being caused by simple taxonomy filters, so sadly I didn't have any relationships to unrequire. Checking this box however doesn't seem to have altered my query in any other way, save for removing the inner joins, which is perfect for me; and may help someone else out there in this vast monkey adventure called life.

 
 
   
   
11
 
vote
vote
最佳答案
 

我使用 hook_views_query_alter() 来改变它。它需要参考$ View和$查询对象。我检查了视图的名称,以查看它是否是我想要的名称,然后在兴趣表中更改了查询对象中的连接类型:

  function my_module_views_query_alter(&$view, &$query) {   if($view->name == 'my_view') {     $query->table_queue['field_data_field_my_field']['join']->type = "LEFT";   } }   
 

I used hook_views_query_alter() to change it. It takes a reference to the $view and $query objects. I checked the name of the view to see if it was the one I wanted, and then changed the join type in the query object for the table of interest:

function my_module_views_query_alter(&$view, &$query) {   if($view->name == 'my_view') {     $query->table_queue['field_data_field_my_field']['join']->type = "LEFT";   } } 
 
 
     
     
4
 
vote

当您在视图中转到关系选项卡时,您将找到一个标题为"需要这种关系" 的复选框。

输入图像描述

  1. 如果选择此复选框,则意味着:制作内部连接
  2. 如果取消选中此复选框它意味着:左加入
 

When you go to Relationships tab in the views you will find a check box titled "Require this relationship".

enter image description here

  1. If you select this checkbox it means : Make an inner join
  2. If you uncheck this checkbox it means : Make a left join
 
 
 
 
1
 
vote

只是为他们的视图中使用和/或组中的那些提供一些信息。

我有一个过滤条件,如果我切换最后两个条件,它会在内部连接和左连接之间改变它。

要解释我当前的筛选条件基本上是如此:
  function field_attach_presave($entity_type, $entity) {   _field_invoke('presave', $entity_type, $entity);    // Let other modules act on presaving the entity.   module_invoke_all('field_attach_presave', $entity_type, $entity); } 0  

使用内部连接,不会给我我想要的结果。如果我只交换了旧条件或其更改了连接类型:

  function field_attach_presave($entity_type, $entity) {   _field_invoke('presave', $entity_type, $entity);    // Let other modules act on presaving the entity.   module_invoke_all('field_attach_presave', $entity_type, $entity); } 1  

这使用左连接。去图,但对别人来说可能有用。

 

Just adding some information for completeness for those using AND/OR groups in their view.

I have a Filter Criteria which if I switch the last two conditions it changes it between an inner join and a left join.

To explain my current Filter Criteria is basically this:

(Published = "Yes" AND Content Type = "Blog) AND ((Blog Type = "X") OR (Blog Type IS NULL)) 

Which uses an INNER JOIN and doesn't give me the results I want. If I just swap the last two conditions in the OR it changes the JOIN type:

(Published = "Yes" AND Content Type = "Blog) AND ((Blog Type IS NULL) OR (Blog Type = "X")) 

This uses a LEFT JOIN. Go figure, but could be useful for someone else.

 
 
0
 
vote

取决于您的视图过滤器,您可能需要 https://www.drupal.org / node / 1766338

 

Depending on your view filters, you might need the patch at https://www.drupal.org/node/1766338

 
 

相关问题

1  答案模块的“搜索问题”为什么不显示任何结果?  ( Why does search question of the answers module not show any results ) 
answers 模块没有显示任何结果。我正在粘贴所键入的问题,但它只是显示"没有问题匹配" 。 是什么问题? 编辑:我现在确实得到了解决方案,我正在尝试其他相关的模块最佳答案和 answers userpopts 在启用搜索功能后启动工作。可能是它们之间相互相互的其他模块启用并开始工作,但我无法讨论它,作为答案...

2  Web服务器身份验证  ( Webserver authentication ) 
我正在寻找一个模块,用于为MS Windows网络实现单一登录。我找到了Web服务器身份验证( https://www.drupal.org/project/webserver_auth )。但是我在配置之前激活了模块,现在我无法访问admin,或者作为任何其他开发人员用户,以继续工作我的项目配置。 曾经有过这个问题...

0  链接到视图中的节点  ( Link to node in views ) 
我有一个有2个显示器的视图: 列表:它是一个未格式化的列表,包含一个页面 表:显示表中的节点标题。 我需要的是在第二个显示器的每一行中的标题重定向到第一个显示中的相应节点,无论"每页项目" 和排序。 ...

3  选择列表的钩形更改  ( Hook form alter for select list ) 
我试图将标题的文本字段过滤器转换为使用钩形窗体删除的选定列表: function myhook_form_alter(&$form, &$form_state, $form_id) { if($form_id == 'views_exposed_form'){ // load nodes fi...

1  面板布局设计师  ( Panel layout designer ) 
我遇到了这个视频显示如何使用面板设置自定义主页。我安装了混沌工具套件,以及面板模块,但我没有看到视频中的布局设计器界面,因为它在视频中显示。 ...

4  如何在Drupal 7中以编程方式创建节点?  ( How to create a node programmatically in drupal 7 ) 
我知道您可以通过创建节点对象,然后触发node_save()以编程方式创建节点,但我实际上没有想要在数据库中存储节点。 是否有一种方法可以在查找内容屏幕中显示的代码中创建特定内容类型的节点,并使用视图等工作,但没有物理存储在数据库中。 我问的原因是,我有一个查看特定内容类型的一系列节点,但我想在该列表中创建自定义节...

4  维护页面 - >显示特定块  ( Maintenance page show a specific block ) 
如何在维护页面(例如jQuery倒计时)上提供块?它是关于设置正确的权限吗? ...

3  如何设置Drupal性能监控以绕过清漆?  ( How to setup drupal performance monitoring to bypass varnish ) 
本月我的Drupal Hosting Company有很多正常运行时间问题。 大多数时候我的pingdom监视器甚至没有提醒问题,因为清漆仍然能够为缓存的主页提供服务。 如何绕过清漆以检查Drupal实例的真实健康吗?它们有一个用户名/密码选项,但我确定的是http用户名/密码,而不是基于表单的登录名。 如果我指定假...

1  如何在单个页面上显示答案模块的所有链接?  ( How to display all links of the answers module on a single page ) 
我使用 ansess 模块,它提供了各种视图,如图所示图片下面。但它不提供我们可以作为链接提供这些视图的任何东西。 我的意思是我希望一行中的所有这四个视图作为页面的菜单选项卡, 所以,它应该是这样的: 主菜单选项卡: Q&A 此q&单击选项卡,它应显示第一个选项卡的所有这些选项卡,默认为: 所有问题...

3  通过URL通过分类学术语,以在Drupal 7中添加内容表格  ( Passing a taxonomy term via url to add content form in drupal 7 ) 
好的,我有一个drupal 7网站。这种情况是,让我们说我在我的网站上遇到恰好有一个分配给它的分类学期 - 让我们说这是ABC的术语。在侧边栏中的块中,我有一个链接将用户发送到Aducuit主题的添加内容表单。表单主题内容类型也具有CCK字段(相同的词汇表)。我正在尝试使用与他们来自的页面相同的术语abc填充该字段。...

0  自动填充内容类型到另一个  ( Auto fill from on content type to another ) 
我有一个名为联系人的内容类型,一个人的基本信息。 (〜600节点) 我有另一个内容类型,如表单,具有所有与联系点的选择列表。当用户选择所需的 contact 时,按从选择列表中的名称,我需要其余的信息 contact 来自动 - 填写表格上的文本框。 任何想法? 注意:使用drupal 7 ...

0  如何更新表单提交的自定义用户字段  ( How to update custom user field on form submit ) 
我想创建一个只有一个列出的自定义用户帐户字段之一的基本页面,可供编辑。 例如,我有一个自定义用户帐户字段:field_companyname 然后将用户转到 www.example.com/?q=user/1/edit , 我希望用户转到不同的页面(i.e www.example.com/node/5 )。 在此...

4  如何在预告片中添加“添加新评论”链接中的rel =“nofollow”?  ( How to add rel nofollow in add new comment link in teaser ) 
是否有一个代码在预告片下"添加新的评论" 链接中添加rel ="nofollow" ? 这是D7生成的预告片中的代码: 添加新评论 所以我如何在该行中添加rel ="nofollow" ? ...

1  搜索API +视图  ( Search api views ) 
如何在视图中使用与索引节点的关系来检索来自其他实体的字段? 作为一个示例...如果我使用"索引节点:作者" 创建关系。然后尝试在搜索结果视图中显示作者的名称,名称为空。我已经尝试了从选项中的每个关系和字段组合,但名称始终为空。 ...

4  在我的帐户菜单中“添加链接”  ( Add link in my account menu ) 
用户帐户页面(http://example.com/user)包含一些默认选项卡,如"查看" ,"编辑" 等。 我想在那里添加我的菜单链接。要返回的内容应依赖于用户ID。我该怎么做呢? ...




© 2021 it.wenda123.org All Rights Reserved. 问答之家 版权所有


Licensed under cc by-sa 3.0 with attribution required.