3

我正在使用 MySQL 数据库来记录我正在创建的游戏中的玩家高分。通过 PHP 文件“highscores.php”访问 MySQL 数据库。

高分都记录在数据库中,但我希望通过 PHP 文件实现实际的排名数字。我希望能够查询特定玩家的排名,而不是只查询他/她的高分。

我正在使用它来获得我的播放器的高分:

$username = $_GET["username"];

$checkID = mysql_query("SELECT * from Highscores WHERE Username =
'$username' ORDER BY Score DESC");

$row = mysql_fetch_array($checkID);

echo $row["Score"];

现在要获得我的玩家在所有其他玩家中的排名,我需要做的就是找到相关行的索引......但是我该怎么做呢?

提前致谢!

4

3 回答 3

3

您可以像这样直接使用 SQL 来执行此操作:

SELECT @rownum:=@rownum+1 ‘rank’, h.*
FROM Highscores h, (SELECT @rownum:=0) r
ORDER BY score DESC;
于 2012-08-29T20:53:47.007 回答
1

你可以做 -

// gets all the records with higher scores than current user
$ranking = mysql_query("SELECT count(*) AS ranking FROM Highscores WHERE Score > (SELECT Score FROM Highscores WHERE Username = '$username' ORDER BY Score DESC LIMIT 1)");
// creates an array from the mysql query above
$ranking_array = mysql_fetch_assoc($ranking); 
// gets the number of higher scores from the array
$ranked_above = $ranking_array['ranking']; 
// takes the total number ranked above and adds a 1 to get their rank
$current_rank = $ranked_above++;

请注意上面关于 SQL 注入的评论,不再使用mysql_函数。

于 2012-08-29T21:14:03.437 回答
0

根据您的数据库设计,我不知道除了从按分数排序的数据库中选择整个分数表之外,您还有很多选择,循环遍历它,为每个项目分配分数索引值,但只提取那些特定于您的项目用户进行展示。

听起来您可能想要考虑运行一些过程来定期对数据库中的分数进行排名,或者可能创建一个存储过程来选择所有的 socres,给它们排名值,并从中选择与用户相关的值。

于 2012-08-29T20:50:22.457 回答