创建MySQL触发器以更新另一个表中的多个记录

创建MySQL触发器以更新另一个表中的多个记录,mysql,triggers,onupdate,Mysql,Triggers,Onupdate,我不确定这是否可行。作为一个项目,我正在开发一个梦幻高尔夫锦标赛应用程序。用户从六组中挑选6名高尔夫球手,每组包含10名高尔夫球手。高尔夫球手所在的组由高尔夫球手表中的组布尔值确定。分数表用于记录比赛条目 我有两张桌子。高尔夫球手的桌子 CREATE TABLE golfers ( golferid INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, firstname VARCHAR(3

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

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

            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) 
            );

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

您可以对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

对于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


这是可能的,但你为什么要这张桌子?目前看来这不是一个好计划。您想要这样的分数表的唯一可能原因是,如果您同时添加了日期。否则,您可以随时查询您的高尔夫球手表,以任何方式显示结果。仔细想想,即使是当天,这也不是一个好主意,因为您是否考虑过可以删除高尔夫球手id,并创建其他id,从而导致不同id或超过6名高尔夫球手,那么桌上的分数会怎样呢?高尔夫球手不能被删除。比赛用户必须从60名高尔夫球手中选出10名参加给定比赛。我用分数表来记录比赛的分数,可能我还没有完全解释。这是我为一个项目创建的一个幻想高尔夫锦标赛应用程序。用户从六组中挑选6名高尔夫球手,每组包含10名高尔夫球手。高尔夫球手所在的组由高尔夫球手表中的组布尔值确定。分数表是用来记录比赛顺序的。保罗戴夫,我也修改了顶部的问题。这是可能的,但是你为什么要这个表呢?目前看来这不是一个好计划。您想要这样的分数表的唯一可能原因是,如果您同时添加了日期。否则,您可以随时查询您的高尔夫球手表,以任何方式显示结果。仔细想想,即使是当天,这也不是一个好主意,因为您是否考虑过可以删除高尔夫球手id,并创建其他id,从而导致不同id或超过6名高尔夫球手,那么桌上的分数会怎样呢?高尔夫球手不能被删除。比赛用户必须从60名高尔夫球手中选出10名参加给定比赛。我用分数表来记录比赛的分数,可能我还没有完全解释。这是我为一个项目创建的一个幻想高尔夫锦标赛应用程序。用户从六组中挑选6名高尔夫球手,每组包含10名高尔夫球手。高尔夫球手所在的组由高尔夫球手表中的组布尔值确定。分数表是用来记录比赛的分数。保罗戴夫,我也修改了顶部的问题。另一个选择是使用if-then语句,但我不能测试这个。你可以参考汉克斯·戴夫,我现在测试一下,很快会给你回复。我很感激。戴夫,非常感谢,这真的很有效,我真的很感激。没问题,很高兴它有效。通过使用
if
(链接中提供了示例),您最终可以使用更专业的方法。另一个选项是使用if-then语句,但我无法测试这一点。你可以参考汉克斯·戴夫,我现在测试一下,很快会给你回复。我很感激。戴夫,非常感谢,这真的很有效,我真的很感激。没问题,很高兴它有效。通过使用
if
(链接中提供了示例),您最终可以使用更专业的方法。