2011-05-15 80 views
2

我不断收到此声明“无效使用组功能的”sql查询的帮助? SQL新手问题

此查询

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

我试图做的是采取lastmessage领域中的用户表,并更新要在邮件表中的最大id其中名称=汤姆

我做了什么错误

回答

5

要执行一个子查询,以获得最大的ID为这是为完成用户“嗵”如下:

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

编辑:WHERE子句仅执行这个正确的用户

+0

非常感谢您的解答 – Tom 2011-05-15 21:31:43

5

不能使用MAX功能的一组外BY语句。您需要在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' 

我不会说这是去解决这个最好方式,而是因为我知道你的表结构影响不大,这似乎是做你想要什么。另外请记住,我没有测试上述反对,所以你需要改变你自己的表和字段适当的。