【问题标题】:MySQL trigger regexp not workingMySQL触发器正则表达式不起作用
【发布时间】:2018-03-15 21:04:57
【问题描述】:

我正在尝试按用户的电子邮件地址对用户进行分组。 正则表达式不工作。帮助

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

【问题讨论】:

  • "不工作" -- 崩溃服务器?得到错误?得到错误答案?什么答案是错误的? SELECT 'a.com' REGEXP '\.com$', 'a.org' REGEXP '\.com$'; --> 1, 0;所以看起来不错。考虑将\. 更改为[.]
  • @RickJames 我没有收到任何错误消息,也没有崩溃。简单地说,没有新的插入。

标签: mysql sql regex triggers phpmyadmin


【解决方案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

一个区别:你的版本总是插入一行;如果users 中缺少id,我的不会。

【讨论】:

  • 您确定id 确实存在于users 中但不存在于user_usergroup_map 中?
  • 是的。 usergroup_map 键控到 user_id 和 group_id。用户可以有多个 group_id 但不能有相同的 group_id。
  • 它起作用了..我将触发器添加到错误的表中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-08
  • 1970-01-01
相关资源
最近更新 更多