0

joomla2.5 アプリケーション用に MAMP を使用して mysql トリガーを作成しようとしています。私のトリガー:

CREATE TRIGGER `getDivision` BEFORE INSERT ON `encex_autoschedGames`
FOR EACH ROW BEGIN

select division into @div_a from encex_autoschedTeams where team_name = new.team_a; 
set new.division = @div_a;

END

次のエラーが発生し続けます。

Column 'division' cannot be null

物語:

2 つのテーブルがあります: 1) ゲーム 2) チーム。チームには列「team_name」と「division」があります ゲームには列「team_a」、「team_b」、および「division」があります

サンプル テーブル:

Teams table:

Team_name, Division
"team1","A"
"Team2","A"
"Team3","A"
"Team4","A"
"Team5","B"
"Team6","B"
"Team7","B"
"Team8","B"

ゲームテーブルの場合、チームテーブルからディビジョンを取得したい..だから、Team1 Vs Team2 を挿入すると、ディビジョンが A として自動的に埋められる.

Games Table:
Team_a, Team_b, Division
"Team1", "Team2", "A"

ゲームテーブルに行が作成されたときに、team_name = team_a である「Teams」テーブルからの「division」で部門列を埋めるように、トリガーを作成したいと思います。

理想的には、team_a と team_b の両方でディビジョンが同じになるようにビルドしますが、ここでは小さなステップが最適であると考えています。

いくつかのデバッグの後、私のエラーは次の部分にあると思います。

何らかの理由で、where 句が null を返しています。いくつかのコマンドラインテストの後、そうではありません。たぶん、New.team_a が間違っていますか?

4

2 に答える 2

0

元のコードは完全に機能します。この問題は、コードの早い段階で文字列を解析し、team_names の文字列に見にくいスペースを残していることが原因でした。"team1" と "team1" が一致しなかったため、クエリは null を返していました。

于 2012-11-22T02:16:01.837 に答える
0

この問題にトリガーを使用する必要はないと思います。まず、単純なストアド プロシージャを使用して、ゲームのデータとチームのそれぞれのレコードを保存します。それはかなり良いでしょう。さらに、トリガーを使用すると、レコードを挿入するたびにトリガーが実行されるため、パフォーマンスも低下します。また、Web サイトをホスティング サイトに提供する場合は、専用のホスティング サーバーを使用して DB にトリガーを作成する必要があります。

ここでのエラーの理由は、除算列をNOT NULLのままにし、クエリ/トリガーの結果がその除算列の値を取得できないことです。したがって、エラーが発生しています

于 2012-11-21T18:54:13.283 に答える