0

したがって、データベースには「test1」と「cities」という 2 つのテーブルがあります。test1 には次の列があります: 'Origin', 'OriginIndex' (関連するものだけに言及しています) と都市: 'city', 'value' (ここでも関連するもののみ)。「都市」テーブルの「都市」列には 5000 の都市があり、各都市 (ロンドン、パリなど) に対応する「値」列には 2 つの値 (0.990、0.345、0.457、1.566 など) があります。

たとえば、ユーザーが「test1」テーブルの「Origin」列に「London」と入力したとします。「都市」テーブルでは、ロンドンの「都市」の「値」は 1.555 です。今、私は 'Origin' = 'city' かどうかをチェックする phpmyadmin でトリガーを起動しようとしています。次のようにトリガーを作成しました。

CREATE TRIGGER t1
AFTER INSERT ON test1 
FOR EACH ROW
BEGIN
UPDATE test1 a, cities b SET a.OriginIndex = b.value WHERE a.Origin = b.city;
END

ただし、これは、PHP Web サイト (localhost) の「test1」テーブルの「Origin」列に入力するたびに「値」を「OriginIndex」に格納するわけではありません。誰でもエラーを理解できますか?アドバイスやヒントをいただければ幸いです。=]

4

1 に答える 1

1
  1. MySql では、トリガー コード内で、そのトリガーがある同じテーブルに変更を加えることはできません。
  2. BEFOREではなくイベントを使用して、挿入される行の列の値を変更することで、この制限を克服できますAFTER
  3. MySql に挿入される行の列の値に対処するには、NEWキーワードを使用する必要があります。

つまり、トリガーは次のようになります

CREATE TRIGGER tg_test1_insert
BEFORE INSERT ON test1 
FOR EACH ROW
  SET NEW.originindex = 
     (
       SELECT value 
         FROM cities 
        WHERE city = NEW.origin
     );

これがSQLFiddleのデモです

于 2013-07-26T09:18:38.753 に答える