我想爲一個小項目做一個排名管理器。總數存儲在數據庫中。我可以很容易地使用mysql獲取最大值和最小值,還可以安排記錄下降問題出現的時候出現一個平局。我需要顯示一個平局:1,2,3,3,4,5,6,7,7,7,7等。重複的數字會顯示我一直在想辦法達到上述目的,但我需要更多的想法,我的看起來很漫長而且複雜。當從最高排名到最低排名時處理關係
任何人都可以分享他/她的關係的想法。
我想爲一個小項目做一個排名管理器。總數存儲在數據庫中。我可以很容易地使用mysql獲取最大值和最小值,還可以安排記錄下降問題出現的時候出現一個平局。我需要顯示一個平局:1,2,3,3,4,5,6,7,7,7,7等。重複的數字會顯示我一直在想辦法達到上述目的,但我需要更多的想法,我的看起來很漫長而且複雜。當從最高排名到最低排名時處理關係
任何人都可以分享他/她的關係的想法。
難道你不只是在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;
我認爲的一點是,等級沒有在數據庫中定義;他需要從分數中計算出來。 – Matchu 2010-05-30 14:48:30
$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)
要突出顯示同樣的比分?並請展示您自己的想法。 – 2010-05-30 14:46:57
讓我發佈一次完成後,因爲我仍然需要返回一個數組,並用mysql中的數據填充它們。 – Gandalf 2010-05-30 15:38:21
嗨,湯姆,檢查出最終的代碼: http://stackoverflow.com/questions/2941898/building-ranking-system-with-data-from-the-database/2944786#2944786 – Gandalf 2010-05-31 16:32:54