计算达到特定查询所需的行数

时间:2015-03-05 22:07:10

标签: php mysql

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

$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行)。我想知道,我该怎么做呢?

1 个答案:

答案 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查询。