我正在构建一个定制的SQL查询。查询有多个干扰,需要返回最新的节点修订。我很好地理解了加入,但由于某些原因,返回最新版本的复杂性让我感到震惊。
由于WHERE子句的复杂性,我更倾向于通过创建视图并以编程方式执行这些视图。
我已经尝试过翻译一个等价视图的输出,但是这个视图的前缀使它成为了一个需要理解的巨大的杂务。我的直觉是,它也不需要那么多的连接。
希望看到一个通用的结构,人们可能会开始,或者为了交谈的缘故,这里有一个大规模简化的版本,我正在工作。这个版本有点不稳定,我想我已经讨论了最新的修订版,但是现在person1Name,person2Name没有返回任何内容。
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发布于 2011-03-04 20:02:51
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表也是如此。不需要左加入。这正是视图在默认情况下所做的事情,除非您指定了关系是必需的。
https://drupal.stackexchange.com/questions/359
复制相似问题