我有一个非常简单的查询,
$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行)。我想知道,我该怎么做呢?
答案 0 :(得分:0)
试试这个:
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
这意味着您必须在rank
表中创建其他列mybb_ranks
。
每次生成排名列表时,此查询都会更新用户的排名。
因此,当您需要在个人资料页面中显示用户排名时,您只需从表格中提出要求:
SELECT rank
FROM mybb_ranks
WHERE player = :player_id
如果您希望它更具动态性,则每次生成播放器配置文件页面时,都可以在SELECT rank
之前运行此UPDATE查询。