ランク、ユーザー名、スコアを表示するリーダーボードを作成しています
現在、mysqlテーブルのデータからユーザー名とスコアを表示するテーブルがあります。各ユーザーのランクを表示するにはどうすればよいのでしょうか。1番が最高スコアのユーザーで、次に降順です。
ありがとう!
ランク、ユーザー名、スコアを表示するリーダーボードを作成しています
現在、mysqlテーブルのデータからユーザー名とスコアを表示するテーブルがあります。各ユーザーのランクを表示するにはどうすればよいのでしょうか。1番が最高スコアのユーザーで、次に降順です。
ありがとう!
PHP/MySQLを読むことをお勧めします。
HTMLヘッダー:テーブルを開き、ヘッダーを作成します
<table>
<tr>
<td>Rank</td>
<td>User</td>
<td>Score</td>
</tr>
PHP:各ユーザーの行を動的に生成します
<?php
$result = mysql_query("SELECT user, score FROM leaderboard ORDER BY score DESC");
$rank = 1;
if (mysql_num_rows($result)) {
while ($row = mysql_fetch_assoc($result)) {
echo "<td>{$rank}</td>
<td>{$row['user']}</td>
<td>{$row['score']}</td>";
$rank++;
}
}
?>
HTMLフッター:テーブルを閉じる必要があります
</table>
SQLですべてを行うことができます。
SET @row = 0;
SELECT
@row := @row + 1 AS rank
userName,
score
FROM
leaderboard
ORDER BY
score DESC
1)ランク付けしようとしているレコードのスコアを取得する必要があります。2)「より良い」スコアを持つレコードの数をカウントします(「より良い」はゲームの種類によって異なります。バスケットボール、スコアが高いほど良いです。ゴルフ、スコアが低いほど良いです。)
だから、
select records in order
for each record
score = record.score
rank = select count(*) + 1 from table where score_column is better than score
display data
end for
問題は、大量のデータに対してcount(*)を実行するのが遅いことです。ただし、最初の2つの異なるスコアのランクを取得すると、クエリなしでコード内の残りの行のランクを決定できることがわかります。ただし、覚えておいてください。おそらく、関係を説明する必要があります。