我有一个非常简单的查询,
$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查询。