php - 对数据库执行计算

标签 php mysql relational-database relationship table-relationships

我有一个包含一些示例数据的数据库设置。我在一张 table 上有很多球队,在另一张 table 上有他们的比赛,在他们的比赛中我有他们已经参加的比赛的得分。我正在努力计算他们的胜负平局的逻辑。我应该在更新结果(在赛程表中)时在球队表中更新它还是根据赛程表中的分数计算它。我不愿意采用第一种方法,因为它可能被认为是重复数据,但无法弄清楚如何计算它的逻辑。正如您可能知道的那样,这是我处理表之间关系的第一个数据库。

relavent section on er diagram

我正在尝试将上表中的数据呈现到排行榜中。为了获得积分,我需要计算赢/输/输的比赛,但我不知道该怎么做(计算主队胜出客队的次数等)

如果我能从赛程表中计算出来,我将从团队中删除大多数列。

最佳答案

与各种运动球相关的数据集和计算极其复杂。我已经编写了根据竞技场可用性生成赛程表的代码,但这并不有趣。

无论如何,为了生成您想要的报告而不在各处复制数据,像下面这样的东西应该可以工作,尽管我还没有能够测试它。

SELECT t.team_name,
    hr.home_win, hr.home_loss, hr.home_draw,
    ar.away_win, ar.away_loss, ar.away_draw
FROM teams t
    -- home record
    INNER JOIN (
        SELECT home_team AS 'team_name',
            SUM(IF(home_team_score>away_team_score,1,0)) AS 'home_win',
            SUM(IF(home_team_score<away_team_score,1,0)) AS 'home_loss',
            SUM(IF(home_team_score=away_team_score,1,0)) AS 'home_draw'
        FROM fixtures
        GROUP BY home_team
    ) hr ON t.team_name = hr.team_name
    -- away record
    INNER JOIN (
        SELECT away_team AS 'team_name',
            SUM(IF(home_team_score<away_team_score,1,0)) AS 'away_win',
            SUM(IF(home_team_score>away_team_score,1,0)) AS 'away_loss',
            SUM(IF(home_team_score=away_team_score,1,0)) AS 'away_draw'
        FROM fixtures
        GROUP BY away_team
    ) ar ON t.team_name = ar.team_name

现在,正常 RDBMS 只会使用 COUNT(scoreA>scoreB),但由于这是 MySQL,我不得不用 SUM(IF( ))fiddle

假设您不会拥有数千个团队,这应该可以很好地扩展。

关于php - 对数据库执行计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29242206/

相关文章:

mysql - 订单和子订单的数据库设计

mysql - 关系型数据库结构逻辑配置

mysql - 如何设计一个用户 "likes"另一个?

php - 如何在php扩展中获取请求 header

mysql - 如何在 SELECT 中创建唯一字段(仅获取第一个)

MySQL 查询 - 获取未插入的 ID 以将新行插入表中

php - PHP 中的 Oracle 数据 lng

php - 用于 API 的 Laravel 中间件身份验证

php - php长轮询中的页面重定向

php - 将 Codigniter Built Website 的所有访问者路由到特定的 Controller 和方法