0

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

分数(id、gameID、playerID、venueID、vsID、score1、score2、score3、score4、score5、total、seasonID)——所有的 xID 都是外键。

前提是每场比赛,每名球员都有一个新条目,所以我有来自文本字段等的 PHP 插入数据。这意味着假设一个赛季有 20 场比赛,并且 score1 'John Smith' 的最高得分达到 10 4 次那个季节。但是他在 score2 上也击中了 8 次,在 score3 上击中了 6 次等等(显然,这些可能在不同的比赛中)。所以在赛季结束时,我有一张大桌子,里面有很多结果(我有 240 行,因为每支球队有 12 名球员),当我查看我的统计数据时,我想知道有多少次约翰史密斯在那个赛季打出 10 分。我显然可以做 5 个查询(或 1 个带有子查询)并添加结果来告诉我这一点,但我想知道纯粹为了我自己的发展。

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

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

等等... | 1

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

在这里搜索(+ Google)让我走上了“加入”的道路,但我并没有取得太大的成功。请问有什么帮助吗?:)

4

2 回答 2

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 是您想要的分数。

于 2012-09-17T15:12:28.010 回答
0

这将获得分别为 10 分的 playerID:

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

将其加入玩家表以获取名称。

于 2012-09-17T19:14:33.473 回答