2016-12-22 7 views
1

2つのチームがお互いに対戦しているときに対戦ヘッドを計算しようとしています。 Team1は、シーズン中にTeam2に対して複数回試合することができます。ヘッド・トゥ・マッチ(ゲーム)があるたびに、ヘッド・トゥ・テーブルに結果を記録します。以下は、データを保持している私のテーブルスキーマです:mysqlを使ってヘッド対ヘッドの統計を計算する方法

`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'match up id', 
`team1_id` int(11) DEFAULT NULL COMMENT 'id of team1', 
`team2_id` int(11) DEFAULT NULL COMMENT 'id of team2', 
`winner` int(11) DEFAULT NULL COMMENT 'winner(team ID) of this head to head', 
`dateplayed` date DEFAULT NULL COMMENT 'date played', 
`tournament_id` int(11) DEFAULT NULL COMMENT 'tournament name', 

私の目標は、team1(team1_id)がteam2(team2_id)に対して持っていたんでしたどのように多くの勝利を計算することができることです。私は今使用しています クエリは次のとおりです。

SELECT count(winner)as wins, te.id FROM head_to_head hh 
    LEFT JOIN teams te ON 
    hh.winner = te.id 
    WHERE hh.team1_id ='225' AND 
    hh.team2_id ='4' 
    group by te.id 
    order by count(winner) 

私だけhh.team2_id(「4」)のための「勝利」を得る上で、私は、クエリを使用している場合。シーズン中に5回ずつ試合を行った場合、チーム1は「x」、チーム2は「x」回、最後の結果は次のようになります。 - 彼らの試合を考えてシーズン中に5回、お互いに対戦する。

[team_id] [Wins] 
    225  3 
    4  2 

ご協力いただきありがとうございます。 ありがとうございます。

+0

だから、あなたは勝者別に勝者、カウント(*)をhead_to_headグループから選択する必要があります。 – GurV

+0

ありがとうGurwinder。それはうまくいくようです。私は1つの小さな追加が必要です。チームのうちの1人は、それに関連するチームIDと共にカウントをゼロに設定する方法を勝ち取ることはできません。ありがとうございました。 – user1960170

+0

これはあなたの質問ではないことは分かっていますが、私は前にこのようなテーブルを作っています。これを簡単にするための提案は、競合他社を別のテーブルに正規化することです。親テーブルにはゲーム情報があり、参加者テーブルにはゲームとチームのための外部キーがあり、勝敗を示す列があり、それが要因であれば、自宅/離席の列を持つことができます。あなたが望むデータ。私はそれが(h。*)で – MageeWorld

答えて

1
select 
    t.id team_id, 
    count(h.winner) wins 
from teams t 
    left outer join 
head_to_head h 
    on t.id = h.winner 
    and h.team1_id ='225' 
    and h.team2_id ='4' 
group by t.id; 
+0

の方法で文句を書く方がはるかに簡単であることを発見しました。エラー1064. – user1960170

+0

@ user1960170今すぐ試してください – GurV

+0

それは動作しますが、チームのテーブルにあるすべてのチームの行が表示されます。どうすれば2つの行だけを表示できますか(team_ID 225と4の場合)。 – user1960170

関連する問題