计算到达某个查询所需的行数


Count how many rows it takes to reach certain query

我有一个非常简单的查询,

$query3 = $db->query("SELECT * FROM mybb_ranks WHERE id='1' ORDER by points DESC");

它将返回一个注册和排名的人的数据库。由于玩家的积分可能会因比赛而随机变化,我们通过在获取值后分配排名来确定排名#,方法如下:

$i = 1;
 while($row = mysqli_fetch_array($query5))
 {
echo "$row[player]'s rank is $i";
           $i++;
 }

正如你所看到的,它根据玩家的积分排序,但根据显示每个等级后添加的变量来确定等级#。然而,在每个用户配置文件中,我也想显示他们的排名。这有点困难,因为我需要一种特定的方法来计算查询必须经过的行数,才能到达特定的玩家。例如,如果PlayerB排名第5,我需要一种方法在他自己的个人资料中显示这一点。要做到这一点,我想查询需要更改,以便能够在到达第5行的某个玩家之前对每一行(4行)进行计数。我在想,我该怎么办?

试试这个:

UPDATE mybb_ranks 
LEFT JOIN (
SELECT
 player,
 @rank:=@rank+1 as current_rank
FROM mybb_ranks 
WHERE id='1'
ORDER BY points DESC
) AS t
ON mybb_ranks.player = t.player
SET mybb_ranks.rank = t.current_rank

这意味着您必须在mybb_ranks表中创建额外的列rank

每次生成排名列表时,此查询都会更新用户的排名

因此,当你需要在用户的个人资料页面上显示用户的排名时,你只需从表中请求即可:

SELECT rank 
FROM mybb_ranks
WHERE player = :player_id

如果你想让它更动态,你可以在每次生成玩家档案页面时,就在SELECT rank之前运行这个UPDATE查询。