群组功能使用无效

问题描述 投票:0回答:3

我不断收到这样的声明

群组功能使用无效

对于此查询

 UPDATE users SET users.lastmessage = MAX(messages.id) WHERE users.name ='tom' 

我想做的是获取用户表中的lastmessage字段并将其更新为消息表中名称= tom的最大id

我做错了什么?

mysql mysql-error-1111
3个回答
5
投票

您想要执行子查询来获取用户“tom”的最大 ID,具体操作如下:

UPDATE users 
   SET users.lastmessage = (SELECT MAX(id) FROM Messages WHERE messages.name = users.name) 
 WHERE users.Name = 'tom'

编辑:WHERE 子句仅对正确的用户执行此操作


5
投票

不能在 GROUP BY 语句之外使用 MAX 函数。 您需要在 UPDATE 查询中执行 SELECT 语句才能正确获取该值。 例如:

UPDATE users
SET users.lastmessage = (SELECT MAX(messages.id) AS m_id FROM messages WHERE messages.name = 'Tom')
WHERE users.name = 'Tom'

但请注意,这有一点限制,因为它仅更新 Tom。 如果您想更新每个用户,您可以这样做:

UPDATE users
SET users.lastmessage = (SELECT MAX(messages.id) AS m_id FROM messages WHERE messages.name = users.name)

这将更新每个用户最后发布消息的日期。


2
投票
UPDATE users, 
 (SELECT MAX(messages.id) as max_message_id FROM messages JOIN users ON (users.user_id = messages.user_id) WHERE users.name LIKE 'Tom') as mm 
 SET users.lastmessage = mm.max_message_id
 WHERE users.name = 'Tom'

我不会说这是解决这个问题的“最好”方法,但因为我对你的表结构知之甚少,这似乎正在做你想做的事情。另请记住,我尚未对上述内容进行测试,因此您需要使用自己合适的表和字段来更改表和字段。

© www.soinside.com 2019 - 2024. All rights reserved.