0

ポイントテーブルが更新(挿入)されたら、users_reputationこのユーザーのポイントの新しいカウント(SUM)を取得total_repして、テーブルの列を更新しusersます。

これは私が思いついたものですが、構文エラーが発生し続けます。誰かが私の間違いを指摘していただければ幸いです。

CREATE TRIGGER after_insert_rep_points AFTER INSERT ON users_reputation
FOR EACH ROW
BEGIN
DECLARE new_total INT(10);
SELECT SUM(rep_points) INTO new_total FROM users_reputation
WHERE user_id = NEW.user_id;
UPDATE users SET rep_total = new_total WHERE user_id = NEW.user_id;
END

これらは参考のために私のテーブルの例です:

ユーザー:

  user_id    |  first_name    |  total_rep
-------------+----------------+--------------
  10001      |  Jim           |  17
  10002      |  Bob           |  5

USERS_REPUTATION:

  user_id  |  rep_task                     |  rep_points  |  rep_date
-----------+-------------------------------+--------------+-----------------------
  10001    |  Commented on article         |  5           |  2012-11-12 08:40:32
  10001    |  Read an article              |  2           |  2012-06-12 12:32:01
  10001    |  Shared an article            |  10          |  2012-06-04 17:39:44
  10001    |  Read an article              |  2           |  2012-05-19 01:04:11
  10002    |  Commented on article         |  5           |  2012-06-17 09:34:21
4

1 に答える 1

2

先頭に区切り文字の変更を追加する必要があります。

delimiter |

CREATE TRIGGER after_insert_rep_points AFTER INSERT ON users_reputation
...
END

|
delimiter ;

デリミタは、DB エンジンにステートメントの終わりを知らせます。通常は です;。しかし、それは最初のストアド プロシージャを終了します;。そして、その定義は不完全です。

区切り文字を変更して、プロシージャの最後に追加できます。その後、区切り文字を元に戻します;

于 2012-11-12T10:35:56.240 に答える