Php 如何从@curRank获得排名

Php 如何从@curRank获得排名,php,mysql,sql,rank,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`) DES

想申请一个排名职位,可以用@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>";  
选择'item',('totalrate`/'nRates`)
作为“排名”,@curRank:=@curRank+1作为“排名”
从“rtgitems”,
(选择@curRank:=0)r,其中项目REGEXP'kelly'
订单依据(`totalrate`/`nrrates`)描述限制10
“回声”$第[‘排名’]行。"";  

但是它只给了我一个1而不是2,你可以把
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' 

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

  • 您需要使用子查询来维护排名位置
  • 这将为您提供排名为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;
    
  • 您甚至可以使用
    限制偏移量
    进行查询,因为它们已按顺序排列:

  • 告诉我们你是如何形成$row[排名]和kelly pageI是什么我称kelly排名为REGEXP'kelly'问题是排名是动态计算的,因此,当你添加REGEXP-kelly时,它只搜索一个人,因此排名为一。创建一列,用排名更新它,并运行触发器每天重新计算排名。谢谢,我通过使用一个别名解决了这个问题,该别名可以轻松地发布你的答案并接受它。是的,与别名一样
        SELECT item, (`totalrate` / `nrrates`) AS `rank`
        FROM rtgitems
        ORDER BY (`totalrate` / `nrrates`) DESC 
        LIMIT 4, 1