我对所有这些都不熟悉,我已经在这里搜索并搜索过,但无济于事.使用google和此处的一些响应,我设法解决了一个单独的问题,但这是我真正感兴趣的,并且想知道这是否有可能/如何实现.
id type of game players timestamp
1 poker a,b,c,d,e,f,g,h 2011-10-08 08:00:00
2 fencing i,j,k,l,m,n,o,p 2011-10-08 08:05:00
3 tennis a,e,k,g,p,o,d,z 2011-10-08 08:10:00
4 football x,y,f,b 2011-10-08 08:15:00
游戏共有7种类型,每种游戏类型用逗号分隔4或8个玩家.
但是,这些玩家是IRC昵称,因此潜在地可能会有新的玩家始终具有唯一的昵称.
我想做的是在整个表格的玩家栏中查看,并根据所玩游戏(不论游戏类型)找到排名前10位的玩家,然后以这种格式将其打印到网站上,例如:
前10名玩家:
> a(已打50场比赛)
> f(打了39场比赛)
> o(已打20场比赛)
……
10克(进行2场比赛)
有谁知道如何做到这一点?任何帮助表示赞赏!老实说,没有这个网站,我什至无法参加我的项目!
解决方法:
我的建议是,不要在同一表中保留每个游戏的玩家列表,而是在游戏表和玩家表之间实现一种关系.
新模型可能如下所示:
桌上游戏:
id type of game timestamp
1 poker 2011-10-08 08:00:00
2 fencing 2011-10-08 08:05:00
3 tennis 2011-10-08 08:10:00
4 football 2011-10-08 08:15:00
桌上型玩家:
id name
1 a
2 b
3 c
.. ..
表格PlayersInGame:
id idGame idplayer current
1 1 1 true //Player a is currently playing poker
当玩家开始游戏时,将其添加到PlayersInGame表中.
当玩家退出游戏时,将当前状态设置为false.
要检索玩家玩的游戏数量,请查询PlayersInGame表.
SELECT COUNT FROM PlayersInGame WHERE idplayer=1
为了加快处理速度,您需要对表进行非规范化(实际上不是非规范化,但我不知道该怎么称呼),并在Players表中跟踪每个玩家的游戏数量.这将增加表的大小,但提供更好的速度.
因此,插入在Players中玩过的专栏游戏,然后查询:
SELECT * FROM Players ORDER BY games_played DESC LIMIT 10
编辑:
正如Ilmari Karonen所指出的那样,要想加快速度,您必须为games_played列创建一个INDEX.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。