如何使用mysql和php获取已排序行的位置
我有一个存储高分的表,以及玩家ID。我希望能够通过球员id提取记录,然后获得排名,或者他们的分数在表中的位置。意思是,基本上我想说“你在第n个”位置,完全基于球员的得分和所有其他得分。例如:如果我在第46位,那么对我来说,位置信息就像你在总分中处于第46位一样。有人能给我举个小例子吗?当存在重复的列组值时,这将提供重复的列组值:如何使用mysql和php获取已排序行的位置,php,mysql,flash,Php,Mysql,Flash,我有一个存储高分的表,以及玩家ID。我希望能够通过球员id提取记录,然后获得排名,或者他们的分数在表中的位置。意思是,基本上我想说“你在第n个”位置,完全基于球员的得分和所有其他得分。例如:如果我在第46位,那么对我来说,位置信息就像你在总分中处于第46位一样。有人能给我举个小例子吗?当存在重复的列组值时,这将提供重复的列组值: SELECT t.playerid, t.highscore, (SELECT COUNT(*) FROM TABLE
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 = ?
这里有一个例子
您希望在用户登录时存储其ID,如
$_SESSION['username'] = $usernamefromdb;
$_SESSION['id'] = $userid;
然后,您希望在yoru网站上的每个页面上打开一个会话,您将根据$_会话['id']获取动态信息
session_start();
然后根据用户ID查找数据库中的数据行
$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个位置声明为变量。并从数据库中提取行的总数
$rank = $row['rank'];
$all = $numrows = mysqli_num_rows($result);
呼应出球员的排名
echo $rank . "out of" . $all;
有两种方法可以做到这一点: 方法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);
SELECT *, (SELECT COUNT(1) AS num FROM scores WHERE scores.score > s1.score) + 1 AS rank FROM scores AS s1
ORDER BY rank asc
方法2:
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);
SELECT *, (SELECT COUNT(1) AS num FROM scores WHERE scores.score > s1.score) + 1 AS rank FROM scores AS s1
ORDER BY rank asc