2012-10-25 21 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