我有一个包含一些示例数据的数据库设置。我在一张 table 上有很多球队,在另一张 table 上有他们的比赛,在他们的比赛中我有他们已经参加的比赛的得分。我正在努力计算他们的胜负平局的逻辑。我应该在更新结果(在赛程表中)时在球队表中更新它还是根据赛程表中的分数计算它。我不愿意采用第一种方法,因为它可能被认为是重复数据,但无法弄清楚如何计算它的逻辑。正如您可能知道的那样,这是我处理表之间关系的第一个数据库。
我正在尝试将上表中的数据呈现到排行榜中。为了获得积分,我需要计算赢/输/输的比赛,但我不知道该怎么做(计算主队胜出客队的次数等)
如果我能从赛程表中计算出来,我将从团队中删除大多数列。
最佳答案
与各种运动球相关的数据集和计算极其复杂。我已经编写了根据竞技场可用性生成赛程表的代码,但这并不有趣。
无论如何,为了生成您想要的报告而不在各处复制数据,像下面这样的东西应该可以工作,尽管我还没有能够测试它。
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/