PHP MySQL - 获取特定行的索引

时间:2012-08-29 20:43:05

标签: php mysql indexing row

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

高分数都记录在数据库中,但我希望实际的排名数由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"];

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

提前致谢!

3 个答案:

答案 0 :(得分:3)

您可以直接使用SQL执行此操作:

SELECT @rownum:=@rownum+1 ‘rank’, h.*
FROM Highscores h, (SELECT @rownum:=0) r
ORDER BY score DESC;

答案 1 :(得分: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_函数。

答案 2 :(得分:0)

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

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