我不断收到此声明“无效使用组功能的”sql查询的帮助? SQL新手问题
此查询
mysql_query("UPDATE users SET users.lastmessage = MAX(messages.id) WHERE users.name ='tom'")
or die(mysql_error());
我试图做的是采取lastmessage领域中的用户表,并更新要在邮件表中的最大id其中名称=汤姆
我做了什么错误
我不断收到此声明“无效使用组功能的”sql查询的帮助? SQL新手问题
此查询
mysql_query("UPDATE users SET users.lastmessage = MAX(messages.id) WHERE users.name ='tom'")
or die(mysql_error());
我试图做的是采取lastmessage领域中的用户表,并更新要在邮件表中的最大id其中名称=汤姆
我做了什么错误
要执行一个子查询,以获得最大的ID为这是为完成用户“嗵”如下:
UPDATE users
SET users.lastmessage = (SELECT MAX(id) FROM Messages WHERE messages.name = users.name)
WHERE users.Name = 'tom'
编辑:WHERE子句仅执行这个正确的用户
不能使用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)
这将更新与他们发布的最后一条消息的日期每一位用户。
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'
我不会说这是去解决这个最好方式,而是因为我知道你的表结构影响不大,这似乎是做你想要什么。另外请记住,我没有测试上述反对,所以你需要改变你自己的表和字段适当的。
非常感谢您的解答 – Tom 2011-05-15 21:31:43