【发布时间】:2012-09-17 14:31:46
【问题描述】:
我正在为一个朋友建立一个网站(一种爱好,而不是任何与职业/工作相关的东西),它将存储有关球员、比赛和分数的信息。我已经构建了大部分报告/统计信息,但我想显示玩家达到最高分数的次数,并且想知道我是否可以改进我的想法(基于子查询)。我的“分数”表是这样设置的:
scores(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 个带有子查询)并添加结果来告诉我这一点,但我想知道什么是最好的方法(或者如果你愿意,'SQL 大师'会使用的那个)纯粹是为了我自己的发展。
所以要结束:我希望运行我的查询并获得一个告诉我的结果集:
Name | Total
John Smith | 12
Rob Smith | 11
Will Smith | 11
等等... | 1
firstName 和 secondName 存储在“player”表中(通过 playerID 外键链接到“scores”表)。如果我愿意,我希望以后能够按需修改查询,例如,如果我想看看有多少次玩家得分为 9 而不是 10(但这显然可以通过通过 PHP 传递数字来完成)。
在此处搜索 (+ Google) 已将我引向“加入”路线,但我并没有取得多大成功。请问有什么帮助吗? :)
【问题讨论】:
-
只是好奇。字段 score1、score2、score3、score4 和 score5 包含什么?我想你每场比赛都会有一个分数。
-
如果您对数据进行标准化,这似乎会简单得多。创建一个子表来保存每个分数。
-
嗨,汤姆。这些字段包含每回合的分数 - 例如,3,5,4,8,7 并且在这种情况下有一个总字段包含 27。我希望为各种报告任务保存单独的回合分数,比如我的那个我试图实现。如果有更好的方法我想听听!由于我拥有的外键和其他表的数量,我有这种方式 - 似乎更容易......耸耸肩。