【问题标题】:Creating a leaderboards, how would I go about displaying rank/position?创建排行榜,我将如何显示排名/位置?
【发布时间】:2011-10-29 02:53:38
【问题描述】:

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

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

谢谢!

【问题讨论】:

  • SELECT user, score FROM leaderboard ORDER BY score DESC
  • 嗨,我已经知道我正在尝试让它在排行榜上显示排名/位置,例如:i.imgur.com/ed9Zx.png(在 excel 上快速完成)

标签: php mysql html leaderboard


【解决方案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】:

    您可以在 SQL 中完成所有事情:

    SET @row = 0;
    SELECT
        @row := @row + 1 AS rank
        userName,
        score
    FROM
        leaderboard
    ORDER BY
        score DESC
    

    【讨论】:

    • 考虑到提问者没有在原始问题中指定计算平局的必要性,我没有考虑到这一点。如果这是一个要求,那么在 SQL 之外的循环中处理会更容易。
    【解决方案3】:

    我建议阅读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 Footer:需要关闭表格

    </table>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-04
      • 1970-01-01
      • 2021-03-09
      • 1970-01-01
      • 1970-01-01
      • 2013-08-31
      • 1970-01-01
      相关资源
      最近更新 更多