users、ap_name_bank_mおよびap_name_bank_hという3つのテーブルがあります。 usersテーブルには、3つのカラム 'name_eng'(英語のユーザ名)、 'name_gdn_eng'(ユーザの保護者の名前)、 'category'があります。無限ループに入るテキストの挿入時のMySQLトリガー
ap_name_bank_mとap_name_bank_hは、それぞれのカテゴリの名前のコーパス( 'm'または 'h')です。
行が更新されるとき、私は両方の名前の各単語が現在の2つのテーブルap_name_bank_mとap_name_bank_hのいずれかに存在するかどうかをチェックしたいと思います。
その数が多いほど、そのカテゴリが割り当てられます。私が書いた以下のコードは無限ループに入り、 "MySQLサーバーはエラーを出してしまった"というメッセージが表示されています。誰かが私がどこに間違っているか教えてくれますか?
name_engとname_gdn_engには空白のみが含まれ、それ以外の単語は含まれないものとします。
DELIMITER $$
create trigger set_cat before update on users_table for each row
BEGIN
declare words text;
declare word varchar(50);
declare num_m int default 0;
declare num_h int default 0;
declare len int default 0;
set words = concat(new.name_eng,' ',new.name_gdn_eng);
iterator:
LOOP
set word = substring_index(words,' ',1);
set num_m = EXISTS(select 1 from ap_name_bank_m where name=word) + num_m;
set num_h = EXISTS(select 1 from ap_name_bank_h where name=word) + num_h;
set words = trim(replace(words,word,''));
END LOOP iterator;
if (num_m > num_h) then set new.category='M'; end if;
if (num_h > num_m) then set new.category='H'; end if;
END $$
DELIMITER ;
なぜループが終了するのですか –
@ P.Salmonそれを入手しました。どのようにループから単語を削除するには? – Naveed
単語が空であるかヌルである場合にループを終了します。 –