表
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
答案 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;
它可能不是“优雅”,但它完成了工作。另外,如果在两个表上创建索引,则此查询将非常快,因为字段是数字。