2

ランク、ユーザー名、スコアを表示するリーダーボードを作成しています

現在、mysqlテーブルのデータからユーザー名とスコアを表示するテーブルがあります。各ユーザーのランクを表示するにはどうすればよいのでしょうか。1番が最高スコアのユーザーで、次に降順です。

ありがとう!

4

3 に答える 3

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>
于 2011-08-17T17:09:42.887 に答える
1

SQLですべてを行うことができます。

SET @row = 0;
SELECT
    @row := @row + 1 AS rank
    userName,
    score
FROM
    leaderboard
ORDER BY
    score DESC
于 2011-08-17T17:41:46.950 に答える
1

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つの異なるスコアのランクを取得すると、クエリなしでコード内の残りの行のランクを決定できることがわかります。ただし、覚えておいてください。おそらく、関係を説明する必要があります。

于 2011-08-17T17:53:07.970 に答える