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