3

作成中のゲームでプレーヤーのハイスコアを記録するために 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"];

他のすべてのプレーヤーの中で自分のプレーヤーのランキングを取得するには、問題の行のインデックスを見つけるだけです...しかし、どうすればいいですか?

前もって感謝します!

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

DB設計に基づいて、スコアでソートされたDBからスコアテーブル全体を選択し、それをループして各項目にスコアインデックス値を割り当てますが、特定のものだけを引き出す以外に多くのオプションがあることを知りません表示用のユーザー。

データベース内のスコアを定期的にランク付けするプロセスを実行するか、すべてのスコアを選択してランク値を与え、そこからユーザー関連のものを選択するストアド プロシージャを作成することを検討する必要があるようです。

于 2012-08-29T20:50:22.457 に答える