2011-08-17 54 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(*)是緩慢的。但是你可以看到,一旦你有了第一個兩個不同分數的排名,你可以在沒有查詢的情況下確定代碼中剩餘行的排名。但請記住:您可能需要考慮關係。