我正在使用一个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"];现在要得到我的球员在所有其他球员中的排名,我需要做的就是找到有问题的行的索引...但是我该怎么做呢?
提前感谢!
发布于 2012-08-30 04:53:47
您可以直接使用SQL完成此操作,如下所示:
SELECT @rownum:=@rownum+1 ‘rank’, h.*
FROM Highscores h, (SELECT @rownum:=0) r
ORDER BY score DESC;发布于 2012-08-30 05:14:03
你可以这样做-
// 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-30 04:50:22
根据您的数据库设计,我不知道您有多少选择,除了从数据库中选择按分数排序的整个分数表,遍历它,为每个项目分配分数索引值,但只拉出那些特定于您的用户显示。
听起来您可能想要考虑运行一些进程来定期对数据库中的分数进行排名,或者创建一个存储过程来选择所有套接字,为它们提供排名值,并从中选择与用户相关的套接字。
https://stackoverflow.com/questions/12186184
复制相似问题