坚持基于技能的排名系统

时间:2014-02-21 09:38:35

标签: php mysql

我正在为我的创业公司制作一个新的锦标赛脚本。我知道我的基本中间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列,而不是在页面加载时筛选所有成员。是否有更好的方法来设置它不会影响页面加载时间并允许我实时显示统计信息?

我还在学习,所以我不是要求直接回答,我会感谢任何和所有的帮助,因为它可以让我找出正确的方法来设置它,我可以从中学习。我在这里以及google上找到的所有排名系统只与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'");

这是正确的吗?有更好的做事方式吗? (我遗漏了青铜器,并没有考虑我唯一的问题是铂金和金币)

1 个答案:

答案 0 :(得分: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