尝试使用mysql中的触发器更新表

问题描述 投票:0回答:1

当“rsform_submission_values”表在两列中有一个具有特定条件的条目时,我需要在名为“user_usergroup_map”的表中插入一行。要向“user_usergroup_map”添加一行,我需要在名为“ch54b_rsform_submission”的表中查找 UserId,因为 userID 未存储在 'rsform_submission_values'。链接两个表的公共字段是 SubmissionId 字段。

我一直在寻找一个触发器来实现这一点,但是,它不会向“user_usergroup_map”表写入任何内容。

下面的mysql有什么明显的问题吗?或者有没有办法对 MYSQL 中的触发器进行故障排除,以便我可以查看是否有任何问题。

谢谢你皮特。

IF NEW.FieldName = '_STATUS' AND NEW.FieldValue = '1' THEN
        INSERT INTO ch54b_user_usergroup_map (`user_id`, `group_id`) 
        SELECT UserId, '12' 
        FROM ch54b_rsform_submission_values 
        INNER JOIN ch54b_rsform_submission ON ch54b_rsform_submission_values.SubmissionId = ch54b_rsform_submissions.SubmissionId;
    END IF

我一直在寻找一个触发器来实现这一点,但是,它不会向“user_usergroup_map”表写入任何内容。

mysql triggers
1个回答
0
投票

您的查询似乎试图将所有用户插入到 user_usergroup_map 中,而不是与正在插入/更新的行相关的用户。因此我建议更简单的方法:

IF NEW.FieldName = '_STATUS' AND NEW.FieldValue = '1' THEN
    INSERT INTO ch54b_user_usergroup_map (`user_id`, `group_id`) 
    SELECT UserId, 12
    FROM ch54b_rsform_submission
    WHERE SubmissionId = NEW.SubmissionId;
END IF

注意,如果您在 user_usergroup_map (user_id, group_id) 上有一个唯一键,并且您想要处理用户已在该组中的情况,那么您可以将

INSERT
更改为
INSERT IGNORE
以避免错误

© www.soinside.com 2019 - 2024. All rights reserved.