即使count为0,Mysql显示连接计数

时间:2017-07-10 21:24:15

标签: mysql join

很抱歉,如果我的标题不清楚。我正在尝试为我的纸牌游戏制作一个大厅系统。当用户按下加入游戏时,我希望服务器检查他们选择的游戏中有多少可用空间,然后将其添加到团队中玩家最少(每个团队目前总是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

我不太确定还有什么可以尝试获得所需的输出。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

首先,您需要从game_id创建一组不同的team_idgame_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的空值。我没有测试过,这只是一个想法。