2011-08-17 89 views
1

我正在创建一个排行榜,其中将显示以下内容:排名,用户名,分数创建排行榜,我将如何去显示排名/位置?

我目前有表格,它将显示用户名和分数从mysql表中的数据,我只是想知道我该怎么去关于为每个用户显示排名,编号1是具有最高分数的用户然后下降。

谢谢!

+1

'SELECT user,score FROM leaderboard ORDER BY score DESC' –

+0

嗨,我已经有我想让它显示在排行榜上的排名/位置,例如:http://i.imgur.com /ed9Zx.png(快速在Excel中完成) – Daniel

回答

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> 
0

你可以做整个事情在SQL:

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

关于关系? – Marvo

+0

考虑到提问者没有在原始问题中指定计算关系的需求,所以我没有考虑到这一点。如果这是一个要求,那么在SQL之外的循环中处理会更容易。 – MrPhoton

0

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