MYSQL 表结构 user_id rank_test(排行的依据) 俩字段SET @rank=0;SELECT @rank := @rank +1 AS rank, `rank_test`,
FROM `battlezone_rank`
ORDER BY `rank_test` DESC想请教的是
1. 这个语句效率高不 百万级 千万级 实时查询会不会有问题
2. 我要查找某个 user_id 的排名应该怎么写?
3. 有没有其他的排名方法? (数据库结构)
FROM `battlezone_rank`
ORDER BY `rank_test` DESC想请教的是
1. 这个语句效率高不 百万级 千万级 实时查询会不会有问题
2. 我要查找某个 user_id 的排名应该怎么写?
3. 有没有其他的排名方法? (数据库结构)
select rt.user_id,(select count(*) from battlezone_rank where user_id>rt.user_id)+1 as rank
from rank_test rt
order by user_id desc;
from
(
SELECT @rank := @rank +1 AS rank, `rank_test`,
FROM `battlezone_rank`
ORDER BY `rank_test` DESC
) t
where user_id='xxx'
(select count(1)+1 from `battlezone_rank` where `rank_test`>t.`rank_test`) as rank,
`rank_test`,
FROM
`battlezone_rank` t
where
userid_id='xxx'
@rank+1 的效率已经很高了.
2. 我要查找某个 user_id 的排名应该怎么写?
select count(*)+1 from `battlezone_rank` where `rank_test` >(select `rank_test` from `battlezone_rank` where userid_id='xxx'
不胜感激
谢谢 ACMAIN_CHM
如果这样,反而是10楼的最快(在有索引(`rank_test` ) 和 (userid_id) 情况下)。
select count(*)+1 from `battlezone_rank` where `rank_test` >(select `rank_test` from `battlezone_rank` where userid_id='xxx'
--比如:按成绩分组排序:
有8个人的成绩:
a 80
b 90
c 70
d 70
e 80
f 80
d 90
g 90排序结果为:
name grade No
a 80 2
b 90 1
c 70 3
d 70 3
e 80 2
f 80 2
d 90 1
g 90 1--楼主:高人,你用count(*)排个给我看看?
这个问题比较常见。关键是用户如何定义这个“排名”的问题。 比如对 80 的前面有两个并列第一的,这个80的是第二,还是第三,要看业务逻辑而定了。 如果80为第二,则可以用 COUNT(DISTINCT) , 但这种排名方式相对比较少见。