2017-07-10 4 views
0

私のタイトルが不明な場合は申し訳ありません。私は自分のカードゲームのロビーシステムを作ろうとしています。ユーザーが参加ゲームを押すと、選択したゲームでどれくらいのスペースが利用可能かをサーバーが確認して、最小のプレイヤーでチームに追加します(現在は常に各チームに1人のプレイヤーがいますが、いくつかの点では1チームあたり2人のプレイヤーに、おそらく2つ以上のチームに)。カウントが0であっても、Mysqlの参加カウントが表示されます

私が持っているテーブルは以下のとおりです。

はgame_teamsのTEAM_IDで

game_id, team_id, score 

game_players

user_id, game_id, team_id 

をgame_teams、それはより多くのように思えたので、ユニークなまたは自動インクリメントされませんすべてのゲームで各チームのユニークな価値を持つためのオーバーヘッドは、主にプレイヤーの配置のためだけにあります。そのため、すべての試合にはチーム数に応じて1-2または1-3のチームがあります。

私は願っていた出力のようなものです:

game_id | team_id | team_size 

    8 |  1 |  1 

    8 |  2 |  0 

現在、私が持っているクエリは以下の通りですが、彼らは私が期待してい何をしていません。

これは、これはほぼ右のようですが、それは私だけすでにそれらに少なくとも1人のプレーヤーを持っているチームを返し、すべてのチーム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 

を返します。チームにそれに関連付けられたプレーヤーがない場合、実際には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 

希望する出力を得るために他に何をしようとしているのかよく分かりません。

ご協力いただければ幸いです。

+1

左結合が必要であり、カウントがNULLであることを意味します。結合は内部結合Iを意味します。E.両方のテーブルのキーが一致する必要があります。 – jimmy8ball

答えて

1

まず、別のセットgame_idteam_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のためにヌルの世話をする必要があります。私はこれをテストしていない、これはちょうどアイデアです。

関連する問題