mysql 返回多行数据_mysql – 如何连接多个表,包括查找表和返回行中的数据

本文探讨了如何在MySQL中通过连接查询有效地获取和展示多个相关表的数据,特别是在处理游戏结果时,如何将比赛、队伍和分数信息整合到一行记录中。作者遇到的问题在于当前的SQL查询方法导致性能下降,并且随着数据增加,处理变得更加复杂。文中提到了两种尝试的解决方案,一种是使用子查询,另一种是直接JOIN操作,但两者都有其局限性。作者寻求一个能够扩展且在单条记录中呈现所有信息的方法。
摘要由CSDN通过智能技术生成

我正在尝试显示一些简单的计算机游戏结果,并且可以轻松地在我的代码中逐行迭代结果.我想要它,以便每个游戏的所有相关数据都在每个记录中,所以我可以在一行输出所有数据,例如:

> 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表中有更多的列,它也可以扩展吗?

任何帮助非常感谢,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值