2017-07-18 9 views
1

これは解決策を見つけることができませんでしたが、これはかなり一般的な質問です。mysqlは値を返さないまま継承します

私は3つのテーブル、 対戦、matchup_optionsを持って、

では作成matchup_votes、対戦は、作成されます「n」はmatchup_optionsが作成され、投票が追加されるまでmatchup_votesが空にされています。

matchup_optionsが2つあっても、クエリは1つの値しか返しません。matchup_votesテーブルには何もありません。 (これらは、theresのまで正しくカウント開始する実際のエントリを、0を返す必要があります)

SELECT matchup.matchupID, matchup_option.player_id, player.name, player.abr, count(matchup_vote.player_id) votes FROM matchup 
      INNER JOIN matchup_option ON matchup_option.matchupID= matchup.matchupID 
      INNER JOIN player ON player.player_id = matchup_option.player_id 
      LEFT JOIN matchup_vote ON matchup_vote.player_id = matchup_option.player_id 
      GROUP BY matchup_vote.player_id; 

とリターン:

matchupID player_id  name  abr  votes 
111   249   Name  SF   0 

期待リターン:

matchupID player_id  name  abr  votes 
111   249   Name  SF   0 
111   331   Name2  JS   0  

ありがとうございました!

答えて

2

group by句が正しくありません。あなたはmatchup_vote.player_idでグループ化しています。私はあなたのソースデータを見ることができませんが、これは1人の選手だけが投票したことを意味します。

あなたのクエリは次のようになります。

SELECT 
    matchup.matchupID 
    , matchup_option.player_id 
    , player.name 
    , player.abr 
    , count(matchup_vote.player_id) votes 
FROM 
    matchup 
    INNER JOIN matchup_option 
    ON matchup_option.matchupID = matchup.matchupID 
    INNER JOIN player 
    ON player.player_id = matchup_option.player_id 
    LEFT JOIN matchup_vote 
    ON matchup_vote.player_id = matchup_option.player_id 
GROUP BY 
    matchup.matchupID 
    , matchup_option.player_id 
    , player.name 
    , player.abr 
+0

これは間違いなく有効です。したがって、本質的に、個々のフィールドだけでなく、データセット全体をグループ化したいのですか? – Nihat

+0

@Nihat:データセット全体ではありません。関連性の高いものこれは、通常、集合関数の上にあるselect文のすべてを意味します。実際の生活の中で集団をどのように崩壊させるか考えてみましょう。それは同じだ。あなたがたくさんの車を数えたいのであれば、それらを1つのグループとして数えます。あなたは、それがどんな種類の車であるのか、それから色でさらにグループ化することができます。 – Jacobm001

+0

@Nihat:それが問題を解決した場合は、チェックボタンをクリックして回答を受け入れることを検討してください:) – Jacobm001

1

あなたはmatchup_vote.player_id、GROUP BYを行っています。

あなたはplayer_idごとに1つの行を取得します。

関連する問題