【发布时间】:2017-12-14 18:21:45
【问题描述】:
对不起,如果我的标题不清楚。我正在尝试为我的纸牌游戏制作大厅系统。当用户按下加入游戏时,我希望服务器检查他们选择的游戏中有多少可用空间,然后将它们添加到玩家最少的团队中(目前每个团队中总是有 1 名玩家,但我想扩展它在某个时候每支球队有 2 名球员,并且可能超过 2 支球队)。
我的桌子是:
game_teams
game_id, team_id, score
game_players
user_id, game_id, team_id
使用 game_teams 时,team_id 不是唯一的或自动递增的,因为在每场比赛中为每支球队设置唯一值似乎需要更多开销,而他们大多只是用于放置球员。因此,所有游戏都有 1-2 或 1-3 队,这取决于团队数量是否有意义。
我希望的输出是这样的:
game_id | team_id | team_size
8 | 1 | 1
8 | 2 | 0
目前我的查询如下,但它们没有达到我的预期。
这将返回团队 1 中的所有玩家和团队 2 中的所有玩家,忽略游戏 ID
SELECT games.game_id, COUNT(game_players.user_id) AS team_size, game_teams2.team_id
FROM games
JOIN game_teams2 ON games.game_id=game_teams2.game_id
JOIN game_players ON game_players.team_id=game_teams2.team_id
WHERE games.game_id=1 GROUP BY game_teams2.team_id
这似乎几乎是正确的,但它只返回已经有至少 1 名球员的球队,如果球队没有与之关联的球员,我真的需要返回 0。
SELECT game_players.game_id,
COUNT(game_players.user_id) AS team_size, game_players.team_id
FROM game_players WHERE game_players.game_id=8 GROUP BY game_players.team_id
我不太确定还要尝试什么才能获得所需的输出。
任何帮助将不胜感激。
【问题讨论】:
-
你需要一个左连接并且计数为空,记住连接意味着内连接 I. E. 两个表中的键需要匹配才能返回行。