第一次发帖,请多多包涵:
我有 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/