2

「グループ関数の使用が無効です」という文が表示され続けます

このクエリの場合

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

私がやろうとしているのは、usersテーブルのlastmessageフィールドを取得し、name=tomであるmessagesテーブルの最大のIDになるように更新することです。

私は間違って何をしましたか

4

3 に答える 3

5

GROUPBYステートメントの外部で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'

ただし、これはトムを更新するだけであるという点で少し制限されていることに注意してください。すべてのユーザーを更新したい場合は、次のように行うことができます。

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

これにより、すべてのユーザーが最後に投稿したメッセージの日付で更新されます。

于 2011-05-15T21:30:19.070 に答える
5

サブクエリを実行して、ユーザー'tom'の最大IDを取得します。これは次のように実行されます。

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

編集:正しいユーザーに対してのみこれを実行するWHERE句

于 2011-05-15T21:30:56.593 に答える
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'

これがこれを解決するための最良の方法であるとは言えませんが、私はあなたのテーブル構造についてほとんど知らないので、これはあなたが望むことをしているようです。また、私は上記をテストしていないので、テーブルとフィールドを適切なものに変更する必要があることにも注意してください。

于 2011-05-15T21:33:39.833 に答える