我已经安装了事件模块的 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
。有什么想法吗?
最佳答案
您可以将 max
放入内联 View 中,然后加入它。请注意,由于您在 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;
关于mysql - 更新 MySQL 表,但只查询最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13071414/