我不断收到此声明“无效使用组功能”
对于这个查询
mysql_query("UPDATE users SET users.lastmessage = MAX(messages.id) WHERE users.name ='tom'")
or die(mysql_error());
我正在尝试做的是获取用户表中的 lastmessage 字段并将其更新为消息表中名称 = tom 的最大 id
我做错了什么
我不断收到此声明“无效使用组功能”
对于这个查询
mysql_query("UPDATE users SET users.lastmessage = MAX(messages.id) WHERE users.name ='tom'")
or die(mysql_error());
我正在尝试做的是获取用户表中的 lastmessage 字段并将其更新为消息表中名称 = tom 的最大 id
我做错了什么
不能在 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)
这将使用他们发布的最后一条消息的日期更新每个用户。
您想要执行子查询以获取用户“tom”的最大 ID,操作如下:
UPDATE users
SET users.lastmessage = (SELECT MAX(id) FROM Messages WHERE messages.name = users.name)
WHERE users.Name = 'tom'
编辑:WHERE 子句只为正确的用户执行此操作
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'
我不会说这是解决这个问题的最佳方法,但因为我对你的表结构知之甚少,这似乎正在做你想做的事。另请记住,我没有针对上述内容进行测试,因此您需要使用自己的正确表和字段更改表和字段。