【问题标题】:Create MySQL Trigger to update multiple records in another table创建 MySQL 触发器以更新另一个表中的多条记录
【发布时间】:2016-01-06 11:10:54
【问题描述】:

我不确定这是否可能。我正在开发一个梦幻高尔夫锦标赛应用程序作为一个项目。用户从六组中挑选六名高尔夫球手,每组包含十名高尔夫球手。高尔夫球手所在的组由高尔夫球手表中的组布尔值确定。成绩表用于记录参赛作品。

我有两张桌子。高尔夫球桌。

            CREATE TABLE golfers (
            golferid INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
            firstname VARCHAR(30) NOT NULL,
            secondtname VARCHAR(30) NOT NULL,
            country VARCHAR(50),
            worldranking int(3),
            tournamentposition int(2),
            group1 boolean,
            group2 boolean,
            group3 boolean,
            group4 boolean,
            group5 boolean,
            group6 boolean,
            day1score int(2),
            day2score int(2),
            day3score int(2),
            day4score int(2),
            totalscore int(3),
            golfscoretotal int(3)
            );

还有一个分数表。如下所示。

            CREATE TABLE scores (
            scoreid INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
            userid INT(11) NOT NULL,
            golferid1 INT(6),
            golfscoretotal1 INT(3),
            golferid2 INT(6),
            golfscoretotal2 INT(3),
            golferid3 INT(6),
            golfscoretotal3 INT(3),
            golferid4 INT(6),
            golfscoretotal4 INT(3),
            golferid5 INT(6),
            golfscoretotal5 INT(3),
            golferid6 INT(6),
            golfscoretotal6 INT(3),
            totalscore INT(4),
            FOREIGN KEY fk_userid REFERENCES users(id) 
            );

是否可以根据 golfscoretotal1 列之前的 golferid1 INT(6) 列中高尔夫球手的 id 更新 score 表(取自 golfers 表)中的分数。

【问题讨论】:

  • 有可能,但你为什么要这张桌子?目前看来这不是一个好的计划。您想要这样的表格分数的唯一可能原因是您添加了一个日期。否则,您可以随时查询您的高尔夫球手表,以任何您想要的方式显示结果。
  • 再想一想,即使有那一天也是个坏主意,因为您是否考虑过可能会删除高尔夫球手 id 并创建其他 id 导致不同 id 或超过 6 个高尔夫球手,然后会发生什么到表分数?
  • 高尔夫球手不能被删除 Dave。比赛用户必须从 60 名高尔夫球手中挑选 10 名参加给定锦标赛。我用分数表来记录比赛成绩
  • 也许我还没有完全解释清楚。它是我为一个项目创建的梦幻高尔夫锦标赛应用程序。用户从六个组中挑选 6 个高尔夫球手,每组包含十个高尔夫球手。高尔夫球手所在的组由高尔夫球手表中的组布尔值确定。成绩表用于记录参赛作品
  • 道歉戴夫,我也修改了顶部的问题。

标签: mysql triggers onupdate


【解决方案1】:

您可以对 golferid1 使用类似这样的简单方法:

CREATE TRIGGER update_scores1 After INSERT ON golfers FOR EACH ROW 
       UPDATE scores
       SET golfscoretotal1 = new.golfscoretotal
       WHERE golferid1 = NEW.golferid

然后为其他人创建更多这样的触发器,总共有 6 个触发器:

CREATE TRIGGER update_scores2 After INSERT ON golfers FOR EACH ROW 
       UPDATE scores
       SET golfscoretotal2 = new.golfscoretotal
       WHERE golferid2 = NEW.golferid

【讨论】:

  • 另一种选择是使用 if-then 语句,但我无法对此进行测试。您可以查看this answer 以供参考
  • 谢谢 Dave,我现在就进行测试,很快就会回复您。我很感激。
  • 戴夫,非常感谢,这是一种享受,我真的很感激。
  • 没问题,很高兴它成功了。您最终可以通过使用if(链接中提供的示例)来使用更专业的方法。
猜你喜欢
  • 2021-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-20
  • 1970-01-01
  • 1970-01-01
  • 2018-02-08
相关资源
最近更新 更多