我正在用 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 个错误的预测。