カスタムSQL:Nodereferenceが参加し、最新のVID
質問
カスタム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
解決
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
これは間違っているように見えます。代わりに、refevent.vidの代わりにevent.field_event_person1_nidと2を使用する必要があります。ノードの追加結合は必要ありません。メインテーブルとしてノードが既にあります。
左結合を使用しているため、クエリはまだ何かを返します。これらのフィールドが必要であるか、/またはあなたが満たされたフィールドのみが必要であると仮定するので、Joinを使用するだけです。左結合は、結合テーブルに一致する行がない場合でも、メインテーブルが返されることを意味します。
同じことがContent_Type_Eventテーブルにも当てはまります。左結合は必要ありません。関係が必要であることを指定しない限り、それはデフォルトでビューが行うことです。