【问题标题】:Updating a MYSQL table based on values input in 2nd table根据第二个表中输入的值更新 MYSQL 表
【发布时间】:2017-07-11 17:58:20
【问题描述】:

我有一个包含运动成绩和排名的数据库。我有一个这样的排名表......

Team     Overall Record    Conference Record
Team1    5-0               2-0
Team2    4-1               1-1
Team3    3-2               0-2

我有一个比赛结果表...

Team    Result1  Result2   Result3  Result4   Result5  Result6
Team1   W        W         W        W         W
Team2   W        L         W        W         W
Team3   W        L         L        W         W

现在,当我在下一场比赛的 Result6 中添加“W”时,有没有办法让它在排名表中将 Team1 记录更新为 6-0,或者如果它是“L”,则将其更改为 5-1 ?

【问题讨论】:

  • 你的数据结构确实需要改进。将结果存储在不同的列中并不是存储重复数据的 SQLish 方式。
  • 为什么不使用 Win, Loss, Total games 来代替?

标签: mysql updating


【解决方案1】:

这种方式的名称为“triggers”。 AFTER UPDATE 似乎符合您的情况。

尽管正如其他人所建议的,您的数据库设计远非完美。

基本上,@r0xette 提出了一个很好的建议:保持胜利,失败,在你的“排名”表中绘制,然后你可以在你的触发器所做的更新中增加适当的列,你不需要关心以前的值并遍历“游戏”表中的整组列/记录来计算您的“记录”对 - 您将在 SELECT 时间执行此操作,例如:

SELECT concat( win, ' - ', loss) AS OverallRecord FROM standings WHERE team = 'team1';

【讨论】:

    【解决方案2】:

    你的表结构不好,我的报价也不好!

     SET @teamname := 'team1';
    
     SELECT @myres := concat(Result1,Result2,Result3,Result4,Result5,Result6) -- and other columns
     FROM results
     WHERE team = @teamname;
    
     UPDATE sports_score
     SET overal = concat(
          length(@myres)-length(replace(@myres,'W',''))
     ,'-',
          length(@myres)-length(replace(@myres,'L',''))
     )
     WHERE team = @teamname ;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-05
      • 2021-07-05
      • 1970-01-01
      • 1970-01-01
      • 2019-04-30
      • 1970-01-01
      相关资源
      最近更新 更多