1

イベントモジュールがインストールされたDrupalインストールがあります。終了日が過ぎてライブにならないすべてのイベントを検索する短いプラグインを作成しました。これは基本的に次のようなSQLクエリです。

UPDATE node LEFT JOIN content_field_dates on node.nid = content_field_dates.nid SET node.status = 0 WHERE node.type = 'event' AND field_dates_value2 < NOW() AND node.status = 1

ただし、一部のイベントには複数の日付が含まれる場合があり、このクエリでは、1つの日付が経過し、一部の日付がまだ先であっても、ステータスが0に設定されます。私は次のように日付SELECTのみをクエリするクエリを実行することができました:MAX()

SELECT * FROM node LEFT JOIN content_field_dates on node.nid = content_field_dates.nid WHERE node.type = 'event' AND field_dates_value2 < NOW() GROUP BY field_dates_value2 HAVING field_dates_value2 = MAX(field_dates_value2)

UPDATEしかし、私は使用できないため、これがクエリにどのように変換されるかわかりませんGROUP BY。何か案は?

4

1 に答える 1

1

maxをインライン ビューに入れてから、それに対して結合することができます。content_field_datesテーブルに述語があるため、それに対して a を実行しても何も得られないことに注意してくださいLEFT JOIN

とにかく、これはうまくいけばあなたが望むものを得るはずです:

UPDATE node n
join (
select nid,max(field_dates_value2) as maxDate
from content_field_dates
group by nid
) t on n.nid = t.nid
SET n.status = 0 
where t.maxDate < now() and n.status = 1;
于 2012-10-25T15:37:12.987 に答える