【问题标题】:Best way(s) of storing arrays of data for a website?为网站存储数据数组的最佳方式?
【发布时间】:2014-05-13 10:26:33
【问题描述】:

抱歉这个含糊不清的问题,但我只能通过举例说明我需要解决方案来进一步解释我的问题。 在篮球比赛中,我和我的朋友一次投篮 20 次并记录投篮次数——我想建立一个数据库来存储每个球员的这 n/20 组中的每一个,以便获得平均值。 MySQL 听起来不是最好的解决方案,因为它不能存储简单的数组。 也许我可以将这些数据存储为二维数组?例如。

stats = [ 
          [ ["me" , 12 , 14 , 8 , 19 , 13 , 10...] ],
          [ ["friend1" , 11 , 9 , 14 , 15 , 16 , 18...] ],
          [ ["friend2" , 17 , 9 , 18 , 14 , 17 , 17...] ]
        ]

我想保留每组 20 个而不是运行总百分比 - 我应该怎么做?谢谢。

【问题讨论】:

    标签: mysql arrays database web


    【解决方案1】:

    我会将它存储在单独的表中,所以你得到:

    Games - GameID, Date, NumberOfShots (so you're not fixed to 20), Etc
    Players - PlayerID, Name, etc
    Turns - TurnID, GameID, PlayerID, Score
    

    您可以根据这些轻松汇总每个玩家,类似这样。

    获取过去 30 天内每位玩家的平均百分比。

    select
      p.PlayerID,
      p.Name
      AVG(p.Score / g.NumberOfShots) * 100 as Percentage
    from
      Games g
      inner join Players p on p.GameID = g.GameID
      inner join Turns t on t.GameID = g.GameID and t.PlayerID = p.PlayerID
    where
      g.Date > (sysdate() - 30)
    group by 
      p.PlayerID,
      p.Name
    

    【讨论】:

    • 这是个好主意!你会说类似的话,我可以为每个玩家制作一张桌子,并为每组 20 人设置一列?
    • 没有。如果你这样做,那么每次你想添加球员或添加新比赛时,你都必须修改表格。使用我建议的结构,您可以通过在 Games 中插入记录来创建匹配。新玩家被插入到玩家表中。比赛结束后,您将每个玩家的得分插入到 Turns 表中。同一玩家可以在每场比赛中轮流,因此您只需输入您和您所有朋友的姓名一次。由于有一个或几个表,它会稍微复杂一些,但是一旦您构建了它,您就可以使用它而无需修改您的数据库的任何内容。
    猜你喜欢
    • 2015-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-05
    • 2018-12-01
    • 2013-09-10
    • 2014-07-28
    相关资源
    最近更新 更多