2014-02-21 40 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