很抱歉,如果我的标题不清楚。我正在尝试为我的纸牌游戏制作一个大厅系统。当用户按下加入游戏时,我希望服务器检查他们选择的游戏中有多少可用空间,然后将其添加到团队中玩家最少(每个团队目前总是1个玩家,但我想扩展它)在某个时刻,每支球队有2名球员,可能超过2支球队。)
我的表格是:
game_teams
del
game_players
game_id, team_id, score
使用game_teams,team_id不是唯一的或自动递增的,因为当每个团队中的每个团队都有一个独特的价值,而他们大多只是在那里进行玩家安置时,这似乎是更多的开销。因此,如果有意义的话,所有游戏都有团队1-2或1-3,具体取决于团队数量。
我希望的输出类似于:
user_id, game_id, team_id
目前我的查询如下,但他们没有做我期望的事情。
这将返回第1组中的所有玩家以及第2组中的所有玩家忽略游戏ID
game_id | team_id | team_size
8 | 1 | 1
8 | 2 | 0
这似乎差不多正确,但它只返回已经拥有至少1名球员的球队,如果球队没有与之相关的球员,我真的需要返回0。
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
我不太确定还有什么可以尝试获得所需的输出。
任何帮助都将不胜感激。
答案 0 :(得分:1)
首先,您需要从game_id
创建一组不同的team_id
和game_teams
,然后将其与game_players
一起加入。
像
这样的东西SELECT x.game_id,
x.team_id,
count(gp.user_id) AS team_size
FROM
(SELECT DISTINCT game_id,
team_id
FROM game_teams
WHERE game_id = 8) x
LEFT JOIN game_players gp ON x.game_id = gp.game_id
AND x.team_id = gp.team_id
您需要处理gp.user_id
的空值。我没有测试过,这只是一个想法。