Mysql排名查询2列

时间:2016-01-16 02:23:49

标签: mysql

  id       user_id     rank_solo     lp
   1             1            15     45
   2             2             7     79
   3             3             17    15

如何整理在rank_solo上排序的排名查询(范围从0到28),如果rank_solo = rank_solo,则使用lp(0-100)来进一步确定排名? (如果lp = lp,则为无领带排名添加排名)

查询应该从某个随机user_id给我排名。 5m +行的表现如何?

所以

User_id 1将排名2

User_id 2将排名3

User_id 3的排名为1

4 个答案:

答案 0 :(得分:2)

您可以使用variablesL

获取排名
select t.*, (@rn := @rn + 1) as ranking
from t cross join
       (select @rn := 0) params
order by rank_solo desc, lp;

答案 1 :(得分:0)

您可以使用ORDER BY对查询进行排序:

SELECT *
FROM `Table`
ORDER BY rank_solo, lp

答案 2 :(得分:0)

我不确定我完全明白你在说什么。使用这么多行,在您用于选择的字段上创建查询。例如,在MySQL客户端中使用:

在mytablename上创建索引RANKINGS(rank_solo,lp,user_id);

根据您在查询中使用的选择数据的内容,您可以更改索引或使用不同的字段组合添加另一个索引。这使我的桌子上的表现提高了10倍或更多。

对于查询,如果您选择的是特定用户,那么您不能只使用:

从表中选择rank_solo,其中user_id = {user id}

如果您想要排名最高的个人,您可以:

通过rank_solo,lp limit 1

从yourtable order中选择*

删除限制1以列出所有限制。

如果我误解了,请发表评论。

答案 3 :(得分:0)

另一种方法是使用第二张表。

table2将包含以下字段:

rank  (auto_increment)
user_id
rank_solo
lp

将等级字段作为自动增量,当它被填充时,它将自动填充以“1”开头的值。

第二张表格准备就绪后,只需在更新排名时执行此操作:

delete from table2;

insert into table2 select user_id,rank_solo,lp from table1 order by rank_solo,lp;

它可能不是“优雅”,但它完成了工作。另外,如果在两个表上创建索引,则此查询将非常快,因为字段是数字。