MySQL中INSERT后两行值的条件增量 [英] Conditional increment of values in two rows after insert in MySQL

查看:12
本文介绍了MySQL中INSERT后两行值的条件增量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我目前在足球数据库中有以下三个表:

teams(name) 
season(name, beginning, end)
game(id, Date, season, hometeam, awayteam, HomeTeamScore, AwayTeamScore)
      (hometeam, awayteam and season are foreign keys)
现在我想要一个新的表,用来记录每支球队的得分和丢球情况,以及他们在每个赛季的得分(每次平局一分,每次胜利三分)。这将使其能够轻松获得排名。

我想过做这样一张表:

stats(season, team, goalsscored, goalsconcedded, points) 

然后我还会在每次插入新游戏时更新它。该表将为每个球队+赛季组合包含一行。我不确定这是不是最好的解决方案,因为我知道我引入了冗余,但由于此信息需要经常计算,我认为它可能有用。我想创建一个触发器来更新此信息,但我不知道如何做到这一点:我必须更新统计表中的两行,这取决于哪支球队正在打这场比赛,并且根据他们是在主场还是客场比赛,我需要用不同的值来更新这些行。

理想情况下,如果还没有为比赛所指的赛季插入球队,则此触发器应该会在这个新表中创建一个条目,但我甚至不确定MySQL中是否可能出现这种情况。 我知道我没有提供我所做的任何测试,但这是因为我确实在网上找不到类似的请求(或者更广泛地说,为了能够轻松地查询所请求的信息)。

此外,对于如何处理这种情况,我愿意接受更好的想法。

推荐答案

只有一个视图比使用触发器维护冗余数据容易得多;这只是一个联合的基本总和:

create view stats as (
    select season, team, sum(goalsscored) goalsscored, sum(goalsconcedded) goalsconcedded, sum(points) points
    from (
        select season, hometeam team, HomeTeamScore goalsscored, AwayTeamScore goalsconcedded,
            case when HomeTeamScore > AwayTeamScore then 3 when HomeTeamScore=AwayTeamScore then 1 else 0 end points
        from game
        union all
        select season, awayteam team, AwayTeamScore goalsscored, HomeTeamScore goalsconcedded,
            case when AwayTeamScore > HomeTeamScore then 3 when AwayTeamScore=HomeTeamScore then 1 else 0 end points
        from game
    ) games
    group by season, team
);

这篇关于MySQL中INSERT后两行值的条件增量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆