在MySQL中插入数据后,对两个数值进行条件性增加
P粉937382230
P粉937382230 2023-09-02 10:52:17
[MySQL讨论组]

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

teams(name) 
season(name, beginning, end)
game(id, Date, season, hometeam, awayteam, HomeTeamScore, AwayTeamScore)
      (hometeam, awayteam和season是外键)

现在我想要有一个新的表,用来记录每个球队进球和失球的情况,以及他们在每个赛季的积分(每场平局一分,每场胜利三分)。这将使得排名很容易获得。

我考虑创建一个像这样的表:

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

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

理想情况下,如果球队还没有为比赛所属的赛季插入记录,这个触发器应该在这个新表中创建一个条目,但我甚至不确定在MySQL中是否可能存在这样的条件。 我知道我没有提供任何我所做的测试,但这是因为我真的找不到类似的在线请求(或更一般地说,能够轻松查询所需信息的请求)。

此外,我对如何处理这种情况的更好想法持开放态度。

P粉937382230
P粉937382230

全部回复(1)
P粉953231781

比使用触发器维护冗余数据要简单得多的方法是使用视图;这只是一个基本的联合求和:

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
);
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号