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

但是,某些事件可能有多个日期,即使某个日期已过且某些日期仍在未来,此查询也会将状态设置为 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表上有一个谓词,因此您不会通过LEFT JOIN对它执行 a 来获得任何东西。

无论如何,这应该有希望让你得到你想要的:

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 回答