从MySQL获得分数 - 比子查询更好的选择?

时间:2012-09-17 14:31:46

标签: mysql sql

我正在为朋友建立一个网站(一种爱好的东西,不是任何专业/工作相关的),它会存储有关玩家,游戏和分数的信息。我已经构建了大部分报告/统计信息,但我想显示玩家达到最高分数的次数,并且想知道我是否可以改进我的想法(基于子查询)。我的“得分”表格如下:

得分(id,gameID,playerID,venueID,versusID,score1,score2,score3,score4,score5,total,seasonID) - 所有xID都是外键。

前提是每个游戏每个游戏都有一个新条目,所以我从文本字段中插入PHP等数据。这意味着说一个赛季有20场比赛,得分1'John Smith'达到了最高得分那个赛季10次4次。但是他在得分2上也有8次命中,在得分3上也有6次(显然,这些可能在不同的游戏中)。所以在本赛季结束时,我有一张大桌子,里面有大量的成绩(我有240行,每队有12名球员)当我查看我的统计数据时,我想知道有多少约翰史密斯在那个赛季打出了10分。我显然可以做5个查询(或1个子查询)并添加结果告诉我这个,但我想知道什么是最好的方法(或'SQL大师'会使用的,如果你喜欢)纯粹的我自己的发展。

所以完成:我希望运行我的查询并获得一个告诉我的结果集:

Name       | Total
John Smith | 12
Rob Smith  | 11
Will Smith | 11

等... | 1

firstName和secondName存储在'player'表中(由playerID外键链接到'scores'表)。如果我愿意的话,我希望能够稍后按需修改查询,例如,如果我想看看玩家得分为9而不是10的次数(但显然可以通过PHP传递数字来完成) )。

在这里搜索(+谷歌)让我走上'加入'路线,但我没有取得多大成功。有什么帮助吗? :)

2 个答案:

答案 0 :(得分:0)

我认为这应该可以解决问题:

SELECT playerID, COUNT(playerID) AS Total FROM (
SELECT playerID FROM scores WHERE score1='10' 
UNION ALL
SELECT playerID FROM scores WHERE score2='10'
UNION ALL
SELECT playerID FROM scores WHERE score3='10'
UNION ALL
SELECT playerID FROM scores WHERE score4='10'
UNION ALL
SELECT playerID FROM scores WHERE score5='10'
) AS thetable
GROUP BY playerID

其中10是你想要的分数。

答案 1 :(得分:0)

这将获得具有10个分数的玩家ID:

select 
    playerID,
    count(score1 = 10 or null) +
    count(score2 = 10 or null) +
    count(score3 = 10 or null) +
    count(score4 = 10 or null) +
    count(score5 = 10 or null)
    as total
from scores
group by playerID
having total > 0

将其加入播放器表格以获取名称。