2010-05-30 80 views
0

我想爲一個小項目做一個排名管理器。總數存儲在數據庫中。我可以很容易地使用mysql獲取最大值和最小值,還可以安排記錄下降問題出現的時候出現一個平局。我需要顯示一個平局:1,2,3,3,4,5,6,7,7,7,7等。重複的數字會顯示我一直在想辦法達到上述目的,但我需要更多的想法,我的看起來很漫長而且複雜。當從最高排名到最低排名時處理關係

任何人都可以分享他/她的關係的想法。

+0

要突出顯示同樣的比分?並請展示您自己的想法。 – 2010-05-30 14:46:57

+0

讓我發佈一次完成後,因爲我仍然需要返回一個數組,並用mysql中的數據填充它們。 – Gandalf 2010-05-30 15:38:21

+0

嗨,湯姆,檢查出最終的代碼: http://stackoverflow.com/questions/2941898/building-ranking-system-with-data-from-the-database/2944786#2944786 – Gandalf 2010-05-31 16:32:54

回答

-1

難道你不只是在SQL中這麼做嗎?具有重複排名的記錄仍然會得到輸出,但是領帶內的訂單將是未定義的。

SELECT id, rank FROM mytable ORDER BY rank ASC; 

啊,貌似我誤解了這個問題,謝謝了。這仍然可以通過相對簡單的SQL查詢來實現。關鍵是使用子查詢來計算已經通過的不同分數。

SELECT id, score, (
    SELECT COUNT(DISTINCT score) + 1 
    FROM mytable 
    WHERE score < outerscore.score 
    ORDER BY score ASC 
) AS rank 
FROM mytable as outertable 
ORDER BY score ASC; 
+0

我認爲的一點是,等級沒有在數據庫中定義;他需要從分數中計算出來。 – Matchu 2010-05-30 14:48:30

0
$data = array(
    'A'=>19,'B'=>18,'C'=>17,'D'=>17,'E'=>16,'F'=>15 
); 

$rank = 0; 
$lastScore = PHP_INT_MAX; 
foreach($data as $name=>$score) { 
    if ($lastScore !== $score) { 
    $lastScore = $score; 
    $rank += 1; 
    } 
    printf("%s %d (%d)\n", $name, $score, $rank); 
} 

打印

A 19 (1) 
B 18 (2) 
C 17 (3) 
D 17 (3) 
E 16 (4) 
F 15 (5) 
相關問題