MySQL-在插入满足其他值的位置后触发更新另一个表中的列

标签 mysql triggers sql-update multiple-tables

第一次发帖,请多多包涵:

我有 3 个表:CWUsers、CWGamesList 和 CWOwnsGame。

CWUsers 包含用户名以及他们通过购买的游戏获得的当前忠诚度积分。

CWGamesList 包含游戏名称、主机类型以及用户在购买游戏时将获得的忠诚度积分。

CWOwnsGame是一个交易表,它记录了用户名、游戏名称和主机类型。

购买游戏后用忠诚度积分更新 CWUsers 表时遇到问题。

最初,我在插入 CWOwnsGame 后有一个触发器,如下所示:

UPDATE CWUSERS SET loyaltyPoints = loyaltyPoints +
(SELECT loyaltyPoints FROM CWGameList WHERE gameConsole = "Wii" AND gameName = "Mario")
WHERE username = "bob"

虽然这仅适用于一个实例,但您如何使其适用于购买的任何游戏。

谢谢

最佳答案

触发器中,您可以访问正在修改的行的两个版本:OLD包含行原样(如果存在),并且NEW包含该行(>如果它会存在。)

为了使触发器按照您所描述的方式工作,您可以使用 NEW 中的值来调节 WHERE 子句,像这样:

CREATE TRIGGER update_loyalty_points
  AFTER INSERT ON CWUserOwnsGame
  FOR EACH ROW
    UPDATE CWUsers
      SET loyaltyPoints = loyaltyPoints +
        (SELECT loyaltyPoints
          FROM CWGameList
          WHERE gameConsole = NEW.cName
            AND gameName = NEW.gName)
      WHERE username = NEW.uName;

我假设您在表之间对列进行了一致的命名。请注意,NEW 中的正确列与 CWOwnsGame 中的列具有相同的名称。

关于MySQL-在插入满足其他值的位置后触发更新另一个表中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36376700/

相关文章:

mysql - 获取续集生成的sql以生成不带反引号的字段名称

jquery - 使用 jquery 事件 keydown 模拟在文本区域上输入不起作用

javascript - jQuery:是否可以在触发函数后停止单击或表单提交并恢复?

c# - 带动画的多重触发

sql - 在 WHEN MATCHED 后合并多个语句

php - 使用两个数据库 Yii 1

mysql - 如何计算组总计?

php - .htaccess 没有重定向?

mysql - 如何在删除后触发器中更新表中的行

javascript - AngularJS 编辑数据/表单