PHP/MySQL でスポーツ システムを構築しています。StackOverFlow の助けを借りて、私はそれを構築しました。
私は OW_SPORTS_GAMES テーブルを持っています。これには、チーム ID とスコアでプレイされた各ゲームに関するすべての詳細が含まれています。これが構造です。
また、ゲームの結果に関するユーザーの予測が格納される別のテーブル OW_SPORTS_PREDICTIONS もあります。ユーザーは、どのチームがゲームに勝つかを予測できます。これがテーブル構造です。
各ユーザーが行った正しい予測と間違った予測の数を知ることができる結果を得たいと考えています。推測が正しければ、ユーザーは各ゲームに存在するポイント (ポイント列) を獲得します。出力は、両方のチームのスコアが 0 であるゲームを無視する必要があります。
これが私の現在のSQLです:
SELECT p.userId,
SUM(IF(g.id IS NOT NULL, 1, 0)) correct,
SUM(IF(g.id IS NULL, 1, 0)) wrong,
SUM(IF(g.id IS NOT NULL, g.points, 0)) AS points
FROM
(SELECT * FROM ow_sports_games WHERE seasonId = 10 AND (homeTeamScore > 0 OR awayTeamScore > 0) ) g
RIGHT JOIN ow_sports_predictions p
ON g.id = p.gameId
AND p.teamId = IF(g.homeTeamScore > g.awayTeamScore , g.homeTeam, IF(g.homeTeamScore < g.awayTeamScore , g.awayTeam, NULL))
GROUP BY p.userId ORDER BY points DESC, correct DESC, wrong DESC;
この SQL を使用すると、ユーザーが予測していないゲームとスコア 0-0 も考慮される間違った統計が得られます。
SQL フィドル: http://sqlfiddle.com/#!2/f4c9ed/2
同じフィドル データでは、2 つの正しい予測と 2 つの間違った予測である必要があります。しかし、それは 2 つの正しい予測と 4 つの間違った予測として表示されます。