SQL-запрос справки? Вопрос новичка - PullRequest
2 голосов
/ 16 мая 2011

Я продолжаю получать это утверждение «Неправильное использование групповой функции»

для этого запроса

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

Я пытаюсь взять поле lastmessage в таблице users иобновите его, чтобы он был самым большим идентификатором в таблице сообщений, где имя = tom

Что я сделал неправильно

Ответы [ 3 ]

5 голосов
/ 16 мая 2011

Вы хотите выполнить подзапрос, чтобы получить максимальный Id для пользователя 'tom', что делается следующим образом:

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

Изменить: предложение WHERE, чтобы выполнить это только для правильного пользователя

5 голосов
/ 16 мая 2011

Вы не можете использовать функцию MAX вне оператора GROUP BY.Вам нужно будет сделать инструкцию SELECT внутри вашего запроса UPDATE, чтобы получить это значение правильно.Например:

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

Заметьте, однако, что это немного ограничено в том, что это только обновление Тома.Если вы хотите обновить каждого пользователя, вы можете сделать это следующим образом:

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

Это обновит каждого пользователя с датой последнего отправленного им сообщения.

2 голосов
/ 16 мая 2011
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'

Я бы не сказал, что это лучший способ решить эту проблему, но из-за того, что я мало знаю о структуре вашего стола, похоже, что он делает то, что вы хотите. Также имейте в виду, что я не проверял вышеизложенное, поэтому вам нужно изменить таблицы и поля на свои собственные.

...