我有一个包含所有用户的表格,我有另一个包含该表子集的数组 例:表格包含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
我非常感谢任何帮助。谢谢你。
答案 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可以是一个示例
的数组