【问题标题】:PHP MySQL - Getting the index of a specific rowPHP MySQL - 获取特定行的索引
【发布时间】:2012-08-24 13:12:26
【问题描述】:

我正在使用 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"];

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

提前致谢!

【问题讨论】:

  • 您知道,您那里有一个潜在的安全漏洞。 SQL 注入可能很讨厌。您可以对行进行暴力搜索,但我怀疑有人会知道一种很酷的 SQL 方法。
  • 是的.. 在此处插入强制性的“使用 mysqli 或 PDO”注释。还要在此处插入强制性的“SQL 注入风险”注释。
  • @MikeBrant:不要忘记强制的 XKCD 链接:http://xkcd.com/327/
  • 尽管 PDO 与此无关,但从某种意义上说,PDO 的 fetchall 函数实际上会为您索引它们。它是一个数组数组,因此 $row[0] 将是 #1,依此类推。
  • 你要的是特定玩家的最高分排名,还是特定玩家所有高分的排名?

标签: php mysql indexing row


【解决方案1】:

你可以像这样直接用 SQL 来做:

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

【讨论】:

  • 这对于向论坛应用程序添加期待已久的功能非常有用。我想找到给定评论所在的页码。我将此查询嵌套在另一个查询中以获得确切的单个数字,如下所示: SELECT index FROM (SELECT @rownum:=@rownum+1 index, c.* FROM content c, (SELECT @rownum:=0) r WHERE pid = 6 #[Post ID] ORDER BY id) AS tmp WHERE id = 32 #[Comment ID]
【解决方案2】:

你可以做 -

// 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 注入的 cmets,不再使用mysql_ 函数。

【讨论】:

【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 2011-08-20
    • 2013-08-14
    • 1970-01-01
    • 2020-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    • 1970-01-01
    相关资源
    最近更新 更多