質問

カスタム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テーブルにも当てはまります。左結合は必要ありません。関係が必要であることを指定しない限り、それはデフォルトでビューが行うことです。

ライセンス: CC-BY-SA帰属
所属していません drupal.stackexchange
scroll top