2017-10-04 20 views
0

私は自分のメールアドレスでユーザーをグループ化しようとしています。 REGEXPが機能していません。 -------------------
新--------- MySQLトリガーの正規表現が機能しない

BEGIN 

DECLARE group_id tinyint(4); 

SET @user_email = (SELECT email FROM `users` WHERE id = NEW.id); 

IF (SELECT @user_email REGEXP '\.com$') THEN SET group_id = 17; 
ELSE SET group_id = 18; 
END IF; 

INSERT INTO `user_usergroup_map` (`user_id`, `group_id`) VALUES (NEW.id, group_id); 

END 

助けて私はいくつかのより多くのテストをしました。

これは...

BEGIN 
    INSERT INTO `user_usergroup_map` (`user_id`, `group_id`) VALUES(3, 18); 
END 

を働いていた。しかし、これは

BEGIN 
    INSERT INTO `user_usergroup_map` (`user_id`, `group_id`) VALUES( 
    NEW.id, 18); 
END 
+0

「機能していません」 - クラッシュサーバーですか?エラーが発生しますか?間違った答えを得る?答えは間違っていますか? 'SELECT 'a.com' REGEXP '\ .com $'、 'a.org' REGEXP '\ .com $';' - > 1、0;それは良いように見える。 '\ .'を' [。] 'に変更することを検討してください。 –

+0

@RickJamesエラーメッセージは表示されず、クラッシュは発生しませんでした。単純に、新しい挿入物はありません。 –

答えて

1

を働くのではなく動作していないかを把握しようとしなかった、私はこの単純化を提案してみましょう:

BEGIN 
    INSERT INTO `user_usergroup_map` (`user_id`, `group_id`) 
     SELECT NEW.id, 
       IF(email REGEXP '[.]com$', 17, 18) 
      FROM users 
      WHERE id = NEW.id; 
END 

1つの違い:あなたのバージョンでは常に行が挿入されます。 usersからidが見つからない場合、私はしません。

+0

あなたのコードを試しました。私は挿入物を手に入れなかった。 –

+0

あなたは 'id'が' users'に存在しましたが、 'user_usergroup_map'にはまだ存在していないと確信していますか? –

+0

はい。 usergroup_mapはuser_idとgroup_idにキーイングされます。ユーザーは複数のgroup_idを持つことができますが、同じgroup_idは使用できません。 –

関連する問題