ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

如何使用PHP和MYSQL在逗号分隔的列表中查找前10个最受欢迎的值

2019-12-02 07:29:26  阅读:147  来源: 互联网

标签:csv count mysql php


我对所有这些都不熟悉,我已经在这里搜索并搜索过,但无济于事.使用google和此处的一些响应,我设法解决了一个单独的问题,但这是我真正感兴趣的,并且想知道这是否有可能/如何实现.

我有看起来像这样的mysql表:

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.

标签:csv,count,mysql,php
来源: https://codeday.me/bug/20191202/2086959.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有