2014-02-21 50 views
2

我正在爲我的啓動創建一個新的比賽腳本。我知道我的基本中間php的方式。我一直在爲這個網站設計一個技術精湛的系統,它包括使用每個成員在錦標賽中贏得比賽時獲得的XP或經驗積分。我目前試圖克服的問題如下與基於技能的排名系統卡住

我想給具體的排名只有少數用戶在網站上。

Platinum - top 3% of users with highest xp 
Gold - top 5% of users with highest xp - after the first 3% 
Bronze - rest of the users on site with xp 
Unranked - users with 0 xp 

這是一個基本的擊穿。我真正需要做的就是爲此創建一個分類系統,在用戶端所有這些都是可見的,這是一個顯示等級和地點示例的大圖標,網站上的第一個等。

我遇到的問題是正確識別或分離前3%的用戶,然後排在前5%等。很容易給排名我所做的就是通過xp降序使用cron作業來訂購用戶在午夜,我會寫在與用戶ID相關的數據庫列的排名。通過這種方式,當用戶訪問頁面時,所有需要加載以查看頁面的都是db列,而不是在頁面加載時篩選所有成員。有沒有更好的方法來設置這不會影響頁面加載時間,並允許我實時顯示統計信息?

我還在學習,所以我不是要求直接答覆,我將不勝感激任何和所有的幫助,因爲它可以讓我找出正確的方法來設置它,我可以從中學習。我在這裏找到的所有排名系統以及谷歌只需要1-5星或喜好和不喜歡。先謝謝你。 (我包括pdo標籤,因爲我使用pdo)

好的,謝謝你的幫助。這是我到目前爲止的地方。

$u_count=d_c("select * from users where xp > 0"); 

$p = $u_count * .03; 

$plat_update=d_u("update user where rank Between 1/$p set badge='platinum'"); 

$g = $u_count - $p; 

$gold = $g * .05; 

$g_start = $p + 1; 

$gold_update=d_u("update user where rank Between $g_start/$gold set badge='gold'"); 

這是正確的嗎?有沒有更好的做事方式? (我遺漏了青銅,沒有排名,我唯一的問題是鉑和金)

+0

將未排序的用戶百分比計算時計入 –

+0

沒有包括的唯一用戶將是排名用戶。 – ICJ

回答

0

在表格中的所有數據 - 他們的「徽章」之後,您將需要執行更新(可能每個「徽章」 )。您將首先識別所有使用0 xp的標記,並標記它們。然後那些底部92%的徽章尚未被識別,然後是3%到8%之間,然後是前3%。

以下是選擇上/下x百分比的鏈接。

stackoverflow.com/questions/4741239/...

或者個人在我看來,一個更好的鏈接:

stackoverflow.com/questions/1309137/mysql-limit-by-percentage

或者你可以使用下面的想法你已經計算出的玩家總數後:

SELECT * FROM table WHERE rank BETWEEN count/number and count/someothernumber --this allows you to create something like percents 
+0

我已經更新了該問題以包括我對您的答案的回覆,您是否可以讓我知道它的正確與否。謝謝。 – ICJ

+0

@ICJ在句法上,我相信你做錯了。當你在做一個between之間的時候,你想要說一些類似於「value1和value2之間的列」的東西,在看着你的時候,看起來你在做「value1之間的列」,注意你沒有說你想要的東西值之間。我正在做一個分區符號,讓你考慮如何計算正確的百分位數。讓我知道你是否希望我爲你解決問題,或者如果這足以讓你一起工作。 – TheOneWhoPrograms