2016-07-05 340 views
-1

我有一个ID Vs点的表,我想根据他的点数返回所需ID的等级。我想我可以做到这一点,如果我可以按照点升序排列表,然后选择所需的ID的行号。问题是我不知道如何在一个查询中执行两个操作(对表格进行排序,然后选择行号)。如何在一个MYSQL查询中排序并获取行号

注意:我正在使用php prepared语句执行查询。

有关如何一步执行这两个操作的任何帮助。

数据样本:

ID  Points 
x  12 
y  15 
w  4 
z  30 

要求:

to return the rank of any ID. example.. Where Id = y --> it returns "2". (the rank in the table) 

更新

我执行下面的代码,并将其排序表,并正确地给出了一个等级,现在我需要的是选择所需的ID(其中ID = x)。怎么做?

SET @rank=0; 
SELECT ID, Points, @rank:[email protected]+1 AS rank From Cars ORDER BY Points DESC; 
+0

请提供样本数据和预期结果。特别注意两行具有相同数量的点时要执行的操作。 –

+0

我编辑了这个问题。谢谢。当两行具有相同的点时,它不会影响我将返回行号。 –

回答

1

这个例子可以帮助您

mysql> SELECT ID,points, @curRank := @curRank + 1 as rank from gg ,(SELECT @curRank := 0) r order by points; 
+------+--------+------+ 
| ID | points | rank | 
+------+--------+------+ 
| w |  4 | 1 | 
| x |  12 | 2 | 
| y |  15 | 3 | 
| z |  30 | 4 | 
+------+--------+------+ 
4 rows in set (0.00 sec) 
+0

在上面的例子中,它的计数,然后它的排名,它试图修改您的查询如上 –

+0

非常感谢Mahesh,但我不明白你是如何得到这个排名(@curRank:= @curRank + 1)? –

+0

我已初始化定义为o并为每个原始值增加如果您添加您的查询我可以帮助修改它 –

0

您可以使用子查询实现MySQL的官方ANSI RANK函数:

select t.*, 
     (select 1 + count(*) 
     from t t2 
     where t2.points < t.points 
     ) as rank 
from t; 

这也可以使用变量完成,但它是相当复杂。

+0

我真的不明白如何(从t t2选择1 + count(*),其中t2.points

相关问题