mysql - 更新 MySQL 表,但只查询最大值

标签 mysql drupal group-by sql-update max

我已经安装了事件模块的 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/

相关文章:

php - 从多个表(php、mysql)搜索时获得最相关的结果

python - 在 Python 中,我需要执行一个访问前一个 "grouped value"的迭代 groupby 来建立聚合列的行的值

MySQL使用group_concat选择多个关系表到一行

c# - MySQLDataReader 在 C# 中检索 Null 值问题

php - 为什么此 SQL 查询语法不正确?

drupal - 使用 UC 和 PayPal WPS 的匿名结账不起作用

mySQL:查询中所有可能的值至少丢失一次

'group_by' 使用的 Ruby 比较

mysql - 我们如何从 Cakephp 中的两个表中减去两列的总和

php - 为什么 APC 为用户缓存递增 "Cache full count",即使它有足够的可用内存?