【问题标题】:Mysql show count on join even if count is 0即使计数为 0,Mysql 也会在加入时显示计数
【发布时间】: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. 两个表中的键需要匹配才能返回行。

标签: mysql join


【解决方案1】:

首先,您需要从game_teams 创建不同的game_idteam_id 集,然后将其与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 的空值。我没有测试过,这只是一个想法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多