2

我正在创建一个排行榜,它将显示以下内容:排名、用户名、分数

我目前有一个表,它将显示 mysql 表中数据的用户名和分数,我只是想知道如何为每个用户显示排名,第 1 是得分最高的用户,然后降序。

谢谢!

4

3 回答 3

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(*) 都很慢。但是您可以看到,一旦您获得了前两个不同分数的排名,您就可以在无需查询的情况下确定代码中剩余行的排名。但请记住:您可能需要考虑关系。

于 2011-08-17T17:53:07.970 回答
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

我建议阅读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 回答