2016-01-06 103 views
2

我不确定这是否可能。我正在开发一个幻想高尔夫锦标赛App作为一个项目。用户从六个组中挑选六名高尔夫球手,每组包含十名高尔夫球手。高尔夫球手所在的组由高尔夫球手表中的组布尔值确定。分数表用于记录比赛条目。创建MySQL触发器来更新另一个表中的多个记录

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

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

是否有可能更新每个高尔夫球手基于在golferid1 INT(6)列中的golfscoretotal1塔之前高尔夫球手的ID在表得分的得分(从高尔夫球手表截取)。

+0

它是可能的,但为什么你想要这张桌子?目前看来这不是一个好的计划。你想要一个表格这样得分的唯一可能的原因是如果你添加了一个日期。否则,您可以随时查询您的高尔夫球手表,以任何您想要的方式显示结果。 – davejal

+0

第二个想法即使是在这一天,这也不是一个好主意,因为你认为高尔夫球员的身份证可以被删除,并且其他身份证的创建导致了不同的身份证号码或者更多的6名高尔夫球手,那么桌上的分数会发生什么? – davejal

+0

高尔夫球手不能被删除戴夫。比赛用户必须从60场比赛中挑选10名高尔夫选手。我使用分数表来记录比赛分数 –

回答

-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 
+0

另一种选择是使用if-then语句,但我无法测试这个。你可以看到[这个答案](http://stackoverflow.com/a/16892291/3664960)作为参考 – davejal

+0

谢谢戴夫,我现在就测试,我会尽快给你回复。我很感激。 –

+0

戴夫,非常感谢,这工作的一种享受,我真的很感激。 –

相关问题