如何从@curRank获得排名位置

时间:2014-04-12 16:26:43

标签: php mysql sql rank

想要调用排名位置是否可以与@curRank一起使用?

我用

创建了一个排名表
    SELECT `item`, (`totalrate` / `nrrates`) AS `rank`, @curRank := @curRank 
+ 1 AS `ranking`  FROM `rtgitems`, (SELECT 

    @curRank := 0) r WHERE item
    REGEXP 'Total'
     ORDER BY (`totalrate` / `nrrates`)  DESC

我得到一张桌子

item       rank      ranking 

Karla       9.5       1
Kelly       9.3       2
Arian       9.1429    3

在凯利页面中,我想打电话给她的排名位置

    SELECT `item`, (`totalrate` / `nrrates`) 
AS `rank`, @curRank := @curRank + 1 AS `ranking` 
FROM `rtgitems`, 
(SELECT @curRank := 0) r WHERE item REGEXP 'kelly' 
ORDER BY (`totalrate` / `nrrates`) DESC LIMIT 10
echo "<td align='center' width='250'>" . $row['ranking'] . "</td>";  

但它只给我1而不是2

2 个答案:

答案 0 :(得分:1)

您可以将WHERE子句移出排名计算结果。

示例

SELECT * FROM (
    SELECT
        `item`, (`totalrate` / `nrrates`) AS `rank`, 
        @curRank := @curRank + 1 AS `ranking` 
    FROM `rtgitems`, (SELECT @curRank := 0) r 
    ORDER BY (`totalrate` / `nrrates`) DESC 
    LIMIT 10
) results
WHERE item REGEXP 'kelly' 

答案 1 :(得分:0)

您可以使用以下任何一种解决方案:

  1. 您需要使用子查询来保持排名。

这将为您提供排名为4的结果:

SELECT * 
FROM
(
    SELECT item, (`totalrate` / `nrrates`) AS `rank`,     
    @curRank := @curRank + 1 AS ranking
    FROM rtgitems p, (SELECT @curRank := 0) r 
    ORDER BY (`totalrate` / `nrrates`) DESC
) AS stat
WHERE ranking = 2;
  1. 您甚至可以使用LIMIT OFFSET来进行查询:
    SELECT item, (`totalrate` / `nrrates`) AS `rank`
    FROM rtgitems
    ORDER BY (`totalrate` / `nrrates`) DESC 
    LIMIT 4, 1