1

2つのアクションができるイベントを作りたいのですが、方法がわかりません。クエリは次のとおりです。

CREATE EVENT rate ON SCHEDULE EVERY 24 HOUR STARTS '2011-12-01 20:00:00' DO SET @p=1
UPDATE users SET rate = (@p:=@p+1) ORDER BY power DESC

アクション間に AND も書き込もうとしましたが、それでもエラーが書き込まれます。

エラーは次のとおりです。

\#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UPDATE users SET rate = (@p:=@p+1) ORDER BY power DESC' at line 2
4

2 に答える 2

1

イベントの本文をBEGIN ... END複合ステートメント ブロックでラップできます。

CREATE EVENT rate ON SCHEDULE EVERY 24 HOUR STARTS '2011-12-01 20:00:00' DO BEGIN
  SET @p=1;
  UPDATE users SET rate = (@p:=@p+1) ORDER BY power DESC;
END

各ステートメントはセミコロンで終了する必要があることに注意してください。そのため、最初に検出されたセミコロンがCREATE EVENTコマンドの終わりであると認識されないように、別のステートメント区切り文字を使用するようにクライアントを構成する必要があります (これを行う方法はクライアントによって異なります)。ただし、MySQL コマンド ライン ツールではDELIMITER コマンドを使用でき、phpMyAdmin では SQL 入力ボックスの下に区切り文字を設定できます)。

あるいは、この場合、複数テーブルUPDATE構文を使用して変数の初期化を実行し、単一の単純なステートメントのみが必要になるようにすることができます。

CREATE EVENT rate ON SCHEDULE EVERY 24 HOUR STARTS '2011-12-01 20:00:00' DO
  UPDATE   users, (SELECT @p:=0) init
  SET      users.rate = (@p:=@p+1)
  ORDER BY users.power DESC
于 2012-12-21T17:09:11.223 に答える
0

;ステートメントの後にセミコロンがありません。

これを試して:

CREATE EVENT rate ON SCHEDULE EVERY 24 HOUR STARTS '2011-12-01 20:00:00' 
      DO SET @p=1;
UPDATE users SET rate = (@p:=@p+1) ORDER BY power DESC;
于 2012-12-21T16:57:22.807 に答える