PHP / MySQL多列排名

JoãoG.

我正在开发一款以两种不同的方式为玩家评分的游戏,即A,B。在此游戏中,我有一个排名页面,该页面显示您在A,B和A + B排名中的位置,以及按以下顺序排列的玩家列表A + B。

在这些不同的得分情况下以及附近的用户中获得A + B排名(显示在列表中)的最有效方法是什么?

我认为我必须至少对每个用户进行一次传递。我应该使用多个左联接和子选择来尝试此操作,并且对得分大于您的A / B / A + B的用户进行计数,还是只查询整个用户+得分列表并使用PHP函数计算排名?

例子:

UID |  A  |  B
----------------
 1  | 100 | 50
 2  | 150 | 20
 3  | 10  | 100

假设查看排名的用户为UID = 2,我们应该看到:

评分表(A + B):
2-170
1-150
3-110

你是#1的得分A.
你是#3的得分B.
你是#1的得分A + B。

草莓
create table my_table
(UID int not null auto_increment primary key
 ,A  int not null
 ,B  int not null
 );

 insert into my_table values
 (1,100,50),
 (2,150,20),
 (3,10,100);

 SELECT uid
     , FIND_IN_SET(a,a_score) a_rank
     , FIND_IN_SET(b,b_score) b_rank
     , FIND_IN_SET(a+b,ab_score)ab_rank

  FROM my_table
     , ( SELECT GROUP_CONCAT(DISTINCT a ORDER BY a DESC) a_score
              , GROUP_CONCAT(DISTINCT b ORDER BY b DESC) b_score
              , GROUP_CONCAT(DISTINCT a+b ORDER BY a+b DESC) ab_score
           FROM my_table
       ) n
  [WHERE uid=2];

+-----+--------+--------+---------+
| uid | a_rank | b_rank | ab_rank |
+-----+--------+--------+---------+
|   1 |      2 |      2 |       2 |
|   2 |      1 |      3 |       1 |
|   3 |      3 |      1 |       3 |
+-----+--------+--------+---------+

http://sqlfiddle.com/#!9/97da6/13

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章