MySQL - LEFT JOIN - 它如何获得我需要的值

MySQL - LEFT JOIN - How do it get the value that i need

我有三个 table:"playerstat"、"player" 和 "game"。

"playerstat"table第一次是空的,"players"已经有玩家选择,table"game"也有一个可以分配统计数据和球员的条目。 现在我希望列出具有相关统计数据的球员。你可以给每个玩家点数或其他统计数据。已经有效了。

"playerstat"中的条目(每个玩家只要填写点数等数据就会自动出现在这里)和"game"table中的条目具有相同的关系代码。玩家没有关系代码,因为游戏总是在变化,但玩家保持不变。

我的问题是,如果游戏完成并开始新游戏并且我向玩家输入数据,那么点数等将再次出现在第一个游戏统计数据中。所以第二场比赛的新数据被添加到第一场比赛的统计数据中。

如何将点数添加到相应的统计数据中,这些统计数据也具有游戏和统计数据的关系代码?

这是我的查询:

$stmt = $conn->prepare("SELECT 
lt_player.name, lt_player.surname, lt_player.nickname, 
lt_player.number, lt_player.id as playerid, 
lt_playerstat.points, lt_playerstat.team_id, 
lt_playerstat.rel_code 
FROM
lt_player
LEFT JOIN lt_playerstat ON (lt_player.id = lt_playerstat.playerid)

我真正需要的是 "WHERE lt_playerstat.rel_code = 'lt_game.rel_code'" 以及所有可用的播放器。我该怎么做?

这是我的 table:

玩家数据 id game_id team_id playerid points active rel_code

玩家 id team_id name surname nickname number

游戏 id team_id date time rel_code

第一场比赛数据 "denny doodle" 有 4 分

第二场比赛的统计数据 "denny doodle" 再次得到 4 分,因为那是第一场比赛的数据,而不是第二场比赛的数据,我猜是因为缺少与比赛的关系。 它显示所有条目,即使它不是当前游戏的 real_code。

假设您知道当前游戏的 rel_code 是什么:

SELECT 
lt_player.name, lt_player.surname, lt_player.nickname, 
lt_player.number, lt_player.id as playerid, 
lt_playerstat.points, lt_playerstat.team_id, 
lt_playerstat.rel_code 
FROM
lt_player
INNER JOIN lt_game
LEFT JOIN lt_playerstat ON (lt_playerstat.playerid = lt_player.id)
where lt_game.rel_code = 'The Rel Code Of the Current Game'

如果您想对游戏中每个玩家的得分求和

SELECT 
lt_player.name, lt_player.surname, lt_player.nickname, 
lt_player.number, lt_player.id as playerid, 
sum(lt_playerstat.points), lt_playerstat.team_id, 
lt_playerstat.rel_code 
FROM
lt_player
INNER JOIN lt_game
LEFT JOIN lt_playerstat ON (lt_playerstat.playerid = lt_player.id)
where lt_game.rel_code = 'The Rel Code Of the Current Game'
group by lt_player.id

如果你不知道当前游戏的rel_code,那你就不能玩了。

不确定你所说的 "all available players" 是什么意思,但这将为所有拥有 player_stat 行和正确 rel_code 的玩家提供 player_stat。