SQL查询帮助? Sql新手问题

时间:2011-05-15 21:25:31

标签: php mysql mysql-error-1111

我不断收到此声明“无效使用群组功能”

此查询

 mysql_query("UPDATE users SET users.lastmessage = MAX(messages.id) WHERE users.name ='tom'") 
or die(mysql_error());  

我要做的是获取users表中的lastmessage字段并将其更新为messages表中最大的id,其中name = tom

我做错了什么

3 个答案:

答案 0 :(得分: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)

这将为每个用户更新他们发布的最后一条消息的日期。

答案 1 :(得分:5)

您想执行子查询以获取用户'tom'的最大ID,如下所示:

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

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

答案 2 :(得分: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'

我不会说这是解决这个问题的最佳方式,但是因为我对你的表结构知之甚少,所以这似乎正在做你想要的。另外请记住,我没有对上面的内容进行过测试,因此您需要使用自己的表格更改表格和字段。