我正在尝试显示一些简单的计算机游戏结果,并使其易于在我的代码中逐行遍历结果。我想要它,以便每场比赛的所有相关数据都在每条记录中,这样我就可以在一行上输出所有数据,例如:
- A队(45分)vs B队(55分),比赛时长:5分钟
- C队(60分)vs D队(65分),比赛时长:4.3分钟
因此,对于一场比赛,有两支球队互相比赛,他们各自在比赛结束时得分。基本上,每场比赛的 games_teams 表中最终都会有两行。
这是我的架构:
这是我的表格数据:
这是我想要实现的输出,因此我可以轻松地遍历结果并将它们输出到页面上:
我设法通过一些可怕的 SQL 和许多子查询来实现这一点,如下所示:
SELECT games.game_id, game_name, game_duration,
(SELECT team_id FROM games_teams WHERE games.game_id = games_teams.game_id LIMIT 0, 1) AS team_id_a,
(SELECT team_id FROM games_teams WHERE games.game_id = games_teams.game_id LIMIT 1, 1) AS team_id_b,
(SELECT teams.team_name FROM games_teams INNER JOIN teams ON games_teams.team_id = teams.team_id WHERE games.game_id = game_id LIMIT 0, 1) AS team_name_a,
(SELECT teams.team_name FROM games_teams INNER JOIN teams ON games_teams.team_id = teams.team_id WHERE games.game_id = game_id LIMIT 1, 1) AS team_name_b,
(SELECT team_score FROM games_teams WHERE games.game_id = games_teams.game_id LIMIT 0, 1) AS team_score_a,
(SELECT team_score FROM games_teams WHERE games.game_id = games_teams.game_id LIMIT 1, 1) AS team_score_b
FROM games
该方法的问题是它会很慢并且无法扩展。我还需要从 games_teams 表中提取其他游戏统计信息,这样就会有更多的子查询。
我尝试的另一种方法是:
我通过以下 SQL 实现了这一点:
SELECT games.game_id, game_name, game_duration, teams.team_id, team_name, team_score
FROM games
INNER JOIN games_teams ON games.game_id = games_teams.game_id
INNER JOIN teams ON games_teams.team_id = teams.team_id
现在这种方式将更难在代码中遍历,因为每个游戏的相关数据都在两个不同的记录中。我必须构建该行的第一部分,然后进入下一个循环迭代并打印下一部分。然后为下一场比赛重新开始,我试图在一行上显示所有信息,例如:
A队(45分)vs B队(55分),比赛时间:5分钟
所以这就是为什么我认为如果全部都在一张唱片上会更容易。有没有办法很好地完成这一点,所以如果我需要 games_teams 表中的更多列,它也可以扩展?
如果您需要重新创建它,这是一个包含数据库代码的 pastebin 链接。
非常感谢任何帮助,谢谢!