2012-10-25 55 views
1

我已經安裝了事件模塊的Drupal安裝。我寫了一個短插件,用於搜索所有結束日期已過的事件,並使其無法生效。它基本上是一個SQL查詢,像這樣:更新MySQL表,但只查詢最大值

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 

然而,一些事件可能有多個日期,而這個查詢將狀態設置爲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。有任何想法嗎?

回答

1

您可以將max放入內聯視圖中,然後加入。請注意,由於您在content_field_dates表上有一個謂詞,因此通過執行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; 
+0

,似乎工作。謝謝! :) – Pezholio