如何使用mysql和php获取排序行的位置

时间:2010-08-16 04:55:38

标签: php mysql flash

我有一张桌子可以存储高分,还有玩家ID。我希望能够通过玩家ID提取记录,然后在表格中获得他们得分的排名或位置。手段,基本上我希望能够说“你在第N个”的位置,纯粹基于球员得分与其他所有得分。例如:如果我处于第46位,那么对我来说,位置信息就像你在总分中排在第46位。有人能告诉我一些小例子吗?

3 个答案:

答案 0 :(得分:3)

有两种方法:

方法1:

SET @i = 0;

SELECT * FROM 
scores s1 INNER JOIN (SELECT *, @i := @i + 1 AS rank FROM scores ORDER BY score DESC) AS s2 USING (id);

方法2:

SELECT *, (SELECT COUNT(1) AS num FROM scores WHERE scores.score > s1.score) + 1 AS rank FROM scores AS s1
ORDER BY rank asc

答案 1 :(得分:0)

当存在重复时,这将提供重复的排名值:

SELECT t.playerid,
       t.highscore,
       (SELECT COUNT(*)
          FROM TABLE x 
         WHERE x.playerid = t.playerid
           AND x.highscore >= t.highscore) AS rank
  FROM TABLE t
 WHERE t.playerid = ?
IE:如果三名球员的第二名得分相同,那么他们的排名都是2。

这将给出一个独特的价值 - 三名球员并列第二名,只有一名将被列为第二名:

SELECT x.playerid,
       x.highscore,
       x.rank
  FROM (SELECT t.playerid,
               t.highscore,
               @rownum := @rownum + 1 AS rank
          FROM TABLE t
          JOIN (SELECT @rownum := 0) r
      ORDER BY t.highscore DESC) x
 WHERE x.playerid = ?

答案 2 :(得分:0)

这是一个例子。

您希望在用户登录时存储用户ID,如此...

 $_SESSION['username'] = $usernamefromdb;
 $_SESSION['id'] = $userid;

然后你想在yoru网站的每个页面上打开一个会话,你将根据$ _SESSION ['id']提取动态信息

 session_start();

然后根据userID

在数据库中查找数据行
 $userid = $_SESSION['id'];
 $rank_query = "SELECT * FROM table_name WHERE id='$userid'";
 $rank_result = mysqli_query($cxn, $rank_query) or die("Couldn't execute query.");
 $row = mysqli_fetch_assoc($rank_result)

然后使用PHP,将第n个postiion声明为变量。并从DB

中提取总行数
$rank = $row['rank'];
$all = $numrows = mysqli_num_rows($result);

回应球员的排名。

echo $rank . "out of" . $all;