- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试设计一个数据库来存储我所有的 friend 和我的高尔夫成绩。您可能知道,高尔夫成绩由 18 洞个人成绩组成。我可以想到两种设计模式的方法:
创建一个表,每个洞有一列(例如 h1 到 h18),该表具有引用其他表的 FK player_id、round_id 和 course_id。它有一个总计列,它是列 h1 到 h18 的总和。如果我改变了一个洞的分数,我将需要手动更新总计列。
创建一个表,其中包含一列用于球洞得分、一列用于球洞索引、一列用于 player_id、course_id 和 round_id。要获得一轮的总分,我需要对 round_id、player_id 执行 SUM 查询。
目前,数据库可能会存储不到 20 人的分数,因此任何一种方法都应该没问题。但是,如果我想存储 20,000 人的分数,哪种方法更具可扩展性呢?
我正在使用 MySQL 5 和 PHP5。谢谢。
更新>查询示例:1. 读取一轮所有玩家的 9/18 分数并建立记分卡。2. 基本统计数据,例如找出一名球员最近 X 轮的最低/平均/最高总分。3. 更高级的统计数据,例如最后 X 轮任何洞的平均杆数。
最佳答案
我的平均分、最高分和最低分是多少?
场景 1.
select (h1+h2+h3+h4+h5+h6+h7+h8+h9+h10+h11+h13+h14+h15+h16+h17+h18) / 18 as avg_score
,greatest(h1,h2,h3,h4,h5,h6,h7,h8,h9,h10,h11,h12,h13,h14,h16,h17,h18) as highest
,least(h1,h2,h3,h4,h5,h6,h8,h8,h9,h10,h11,h12,h13,h14,h16,h17,h18) as lowest
from scores
where player_id = 1;
对比
select avg(score) as avg_score
,max(score) as highest
,min(score) as lowest
from scores
where player_id = 1;
哪个洞是我最糟糕的?
场景 2.
select case when h1 = greatest(h1,h2,h3,h4,h5,h6,h8,h8,h9,h10,h11,h12,h13,h14,h16,h17,h18) then 'H1'
when h2 = greatest(h1,h2,h3,h4,h5,h6,h8,h8,h9,h10,h11,h12,h13,h14,h16,h17,h18) then 'H2'
when h3 = greatest(h1,h2,h3,h4,h5,h6,h8,h8,h9,h10,h11,h12,h13,h14,h16,h17,h18) then 'H3'
when h4 = greatest(h1,h2,h3,h4,h5,h6,h8,h8,h9,h10,h11,h12,h13,h14,h16,h17,h18) then 'H4'
when h5 = greatest(h1,h2,h3,h4,h5,h6,h8,h8,h9,h10,h11,h12,h13,h14,h16,h17,h18) then 'H5'
when h6 = greatest(h1,h2,h3,h4,h5,h6,h8,h8,h9,h10,h11,h12,h13,h14,h16,h17,h18) then 'H6'
when h7 = greatest(h1,h2,h3,h4,h5,h6,h8,h8,h9,h10,h11,h12,h13,h14,h16,h17,h18) then 'H7'
when h8 = greatest(h1,h2,h3,h4,h5,h6,h8,h8,h9,h10,h11,h12,h13,h14,h16,h17,h18) then 'H8'
when h9 = greatest(h1,h2,h3,h4,h5,h6,h8,h8,h9,h10,h11,h12,h13,h14,h16,h17,h18) then 'H9'
when h10 = greatest(h1,h2,h3,h4,h5,h6,h8,h8,h9,h10,h11,h12,h13,h14,h16,h17,h18) then 'H10'
when h11 = greatest(h1,h2,h3,h4,h5,h6,h8,h8,h9,h10,h11,h12,h13,h14,h16,h17,h18) then 'H11'
when h12 = greatest(h1,h2,h3,h4,h5,h6,h8,h8,h9,h10,h11,h12,h13,h14,h16,h17,h18) then 'H12'
when h13 = greatest(h1,h2,h3,h4,h5,h6,h8,h8,h9,h10,h11,h12,h13,h14,h16,h17,h18) then 'H13'
when h14 = greatest(h1,h2,h3,h4,h5,h6,h8,h8,h9,h10,h11,h12,h13,h14,h16,h17,h18) then 'H14'
when h15 = greatest(h1,h2,h3,h4,h5,h6,h8,h8,h9,h10,h11,h12,h13,h14,h16,h17,h18) then 'H15'
when h16 = greatest(h1,h2,h3,h4,h5,h6,h8,h8,h9,h10,h11,h12,h13,h14,h16,h17,h18) then 'H16'
when h17 = greatest(h1,h2,h3,h4,h5,h6,h8,h8,h9,h10,h11,h12,h13,h14,h16,h17,h18) then 'H17'
when h18 = greatest(h1,h2,h3,h4,h5,h6,h8,h8,h9,h10,h11,h12,h13,h14,h16,h17,h18) then 'H18'
end as hole_highest_score
from scores
where player_id = 1;
对比
select hole, score
from scores s1
where player_id = 1
and score = (select max(score)
from scores s2
where s2.player_id = s1.player_id)
我会在任何一天选择场景 2 :)
关于sql - 创建用于存储高尔夫分数的可扩展数据库模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4844593/
不幸的是,这可能不是一个有效的 Code-Golf 问题,因为它可能只是 Javascript;然而,自从 这可能是唯一在现实世界中有用的 Code Golf 比赛我将继续发布它。 Google An
如何使用powershell查找下一个工作日? 最佳答案 嗯,我的手机允许我设置工作日,但 Windows/.NET 不会,所以我假设周一到周五。 注意:由于问题包括“高尔夫”,我正在打这个问题,即尝
最短的 Perl 单行代码是什么,它打印出硬编码的 2 位小数的前 9 次幂(例如,.37),每行各占一行? 输出看起来像这样: 1 0.37 0.1369 [etc.] 官方 Perl 高尔夫规则:
我有一个看起来像这样的列表列表: [['Tom', 'Dick'], ['Harry', 'John', 'Mike'], ['Bob']] 我想把它变成一个字典,其中每个键都是一个名称,每个值都是一
我是一名优秀的程序员,十分优秀!