获取mysql中特定用户的排名

时间:2014-01-18 22:21:04

标签: mysql sql

我有一个包含所有用户的表格,我有另一个包含该表子集的数组 例:表格包含1,2,3,4,5,6,7,8,9,10

我的用户:2,4,6,8,10:

我的用户之间的排名w.r.t积分与1,3,5,7,9

无关

我目前有这张表:

create table uservotes(id int, name varchar(50), vote int);

INSERT INTO uservotes VALUES
(1, 'A', 34),
(2, 'B', 80),
(3, 'bA', 30),
(4, 'C', 8),
(5, 'D', 4),
(6, 'E', 14),
(7, 'F', 304),
(8, 'AA', 42),
(9, 'Ab', 6),
(10, 'Aa', 10);

如何在2,4,6,8,10之间获得排名

我正在寻找答案:

id    rank    votes   name
2       1       80     B
4       5        8     C
6       3       14     E
8       2       42     AA
10      4       10     Aa

我非常感谢任何帮助。谢谢你。

2 个答案:

答案 0 :(得分:1)

我怀疑这就是你想要的:

select uv.*, (@rank := @rank + 1) as rank
from uservotes uv cross join
     (select @rank := 0) const
where uv.id in (2, 4, 6, 8, 10)
order by votes desc;

这是在MySQL中有效计算排名的标准方法,以及用于选择ID的where子句。

编辑:

在开始之前,在大多数数据库中,您只需使用row_number()dense_rank()来实现此目的。 MySQL不支持这种ANSI标准功能。

关键是变量@rank。子查询const将其初始化为0.然后查询运行。 where子句只获取您感兴趣的行。order by然后通过投票将它们排序,最大的投票率。最后,@rank := @rank + 1 as rank更新@rank变量并将其分配给输出中的列。

答案 1 :(得分:0)

您需要使用动态变量循环SQL问题

之类的东西
select * from `uservotes` where id = $someones_id

$ someones_id可以是一个示例

的数组