我正在尝试显示一些简单的计算机游戏结果,并且可以轻松地在我的代码中逐行迭代结果.我想要它,以便每个游戏的所有相关数据都在每个记录中,所以我可以在一行输出所有数据,例如:
> A队(得分45)对阵B队(得分55),比赛持续时间:5分钟
> C队(得分60)对阵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)对阵B队(得分55),比赛持续时间:5分钟
所以这就是为什么我认为如果它只是在一条记录上会更容易.有没有办法很好地完成这个,所以如果我需要在games_teams表中有更多的列,它也可以扩展吗?
任何帮助非常感谢,谢谢!