首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自定义SQL: nodereference连接和最新的VID

自定义SQL: nodereference连接和最新的VID
EN

Drupal用户
提问于 2011-03-04 18:37:12
回答 1查看 413关注 0票数 1

我正在构建一个定制的SQL查询。查询有多个干扰,需要返回最新的节点修订。我很好地理解了加入,但由于某些原因,返回最新版本的复杂性让我感到震惊。

由于WHERE子句的复杂性,我更倾向于通过创建视图并以编程方式执行这些视图。

我已经尝试过翻译一个等价视图的输出,但是这个视图的前缀使它成为了一个需要理解的巨大的杂务。我的直觉是,它也不需要那么多的连接。

希望看到一个通用的结构,人们可能会开始,或者为了交谈的缘故,这里有一个大规模简化的版本,我正在工作。这个版本有点不稳定,我想我已经讨论了最新的修订版,但是现在person1Name,person2Name没有返回任何内容。

代码语言:javascript
复制
SELECT event.nid AS eventnid,
       event.field_event_date_value AS date,

       event.field_event_person1_nid AS person1Nid,
       person1.field_person_name_value AS person1Name,

       event.field_event_person2_nid AS person2Nid,
       person2.field_person_name_value AS person2Name,
FROM {node} n

LEFT JOIN {content_type_event} event
    ON n.vid = event.vid        

LEFT JOIN {node} refevent
    ON event.vid = refevent.nid

LEFT JOIN {content_type_person} person1
    ON refevent.vid = person1.nid

LEFT JOIN {content_type_person} person2
    ON refevent.vid = person2.nid
EN

回答 1

Drupal用户

回答已采纳

发布于 2011-03-04 20:02:51

代码语言:javascript
复制
LEFT JOIN {node} refevent
    ON event.vid = refevent.nid

LEFT JOIN {content_type_person} person1
    ON refevent.vid = person1.nid

LEFT JOIN {content_type_person} person2
    ON refevent.vid = person2.nid

这看上去不对。相反,您可能希望使用event.field_event_person1_nid和2而不是refevent.vid。节点的附加连接不应该是必需的,您已经将节点作为主表。

查询仍然返回某些内容,因为您使用的是左联接。由于我假设这些字段是必需的,并且/或您只需要那些已填充的字段,所以应该只使用JOIN。“左联接”意味着即使联接表中没有匹配的行,也返回主表。

content_type_event表也是如此。不需要左加入。这正是视图在默认情况下所做的事情,除非您指定了关系是必需的。

票数 0
EN
页面原文内容由Drupal提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://drupal.stackexchange.com/questions/359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档