我有一张所有游戏的表:游戏ID,赢家和输家。赢家和输家是varchar,是逗号分隔的ID列表,例如:
| id | winners | loosers |
| 1 | 10,24,3 |34,158,71|
我想创建一个查询来选择用户的顶部(前30名)排序的评级,这是数量的胜利除以数量的失败。但表中的所有用户有6k行和迭代它,使顶部需要1分钟,这对我来说太长了。任何方法使它更简单?
我想到了一个想法,即遍历游戏表,将user_id、wins和looses放入临时表,然后选择结果,但我不确定如何才能做到这一点。
所需输出格式:
| user_id | rating |
并且仅使用MySQL查询。
1条答案
按热度按时间von4xj4u1#
有什么办法能让它简单点吗?
很高兴你这么问。是的,有一个很好的方法可以让事情变得简单:
如果在给定行的每列中存储一个离散值,并且以后需要对各个值进行计算,则SQL的效果最佳。
存储两个表:第一个表中每个游戏占一行,第二个表中每个用户每个游戏占一行,还有一个属性表示他们是赢了还是输了。
| 游戏标识|用户标识|韩元|
| - ------|- ------|- ------|
| 1个|三个|1个|
| 1个|十个|1个|
| 1个|二十四|1个|
| 1个|三十四|无|
| 1个|七十一|无|
| 1个|一百五十八|无|
现在,您可以更简单地查询它,以获得每个用户的成功与失败的百分比: