首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XP水准系统- PHP

XP水准系统- PHP
EN

Stack Overflow用户
提问于 2012-09-18 20:53:55
回答 1查看 354关注 0票数 0

秩表

  • ID,主键
  • 等级,等级或级别,1为最高,3为最低
  • MIN_SCORE,达到等级所需的最小点数或XP。
  • 名称,级别的关联名称。 秩表,+----+------+-----------+-------------------------+,ID,-+

排名表

  • ID,主键
  • FK_MEMEBER_ID,成员主密钥的外键
  • FK_RANK,作者排名表的排名列的外键(顶部)
  • 得分,成员当前的挣得分数或XP 排名表+-+-+2\x{e76f}\x{e76f}

在我的班级中,我存储了排名--与排名表中的排名相匹配--并关联了最低分数;排名为键,MINIMUM_SCORE为值。

当一个成员的分数(XP)被更新(上/下)时,我想根据下面的数组测试更新的分数,以确定他们的排名是否也需要更新。

代码语言:javascript
复制
private $scores = array('3' => '12116', '2' => '15146', '1' => '18932',);

使用更新的分数,如何从上面的数组中确定相关的等级?

所有的事情都是开放的,这是我第一次创建一个排名系统,所以我希望能把它做好:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-18 21:10:57

好的,给出这些表:

代码语言:javascript
复制
Ranks
+------+-----------+-------------------------+
| RANK | MIN_SCORE |          NAME           |
+------+-----------+-------------------------+
|  1   |     18932 | Editor-in-Chief         |
|  2   |     15146 | Senior Technical Writer |
|  3   |     12116 | Senior Copywriter       |
+------+-----------+-------------------------+

Members
+-----------+-------+
| MEMBER_ID | SCORE |
+-----------+-------+
|     1     | 17722 |
|     2     | 16257 |
|     3     | 12234 |
+-----+-------------+

您可以通过以下方法获得一个成员加上他们的级别:

代码语言:javascript
复制
SELECT m.MEMBER_ID, r.NAME
FROM Members m INNER JOIN Ranks r
ON m.SCORE > r.MIN_SCORE -- Pick ranks that a user is eligible for
WHERE MEMBER_ID = ?
HAVING MAX(r.MIN_SCORE) -- Pick the rank with the highest score

这允许您删除整个表,这将使您的代码更易于维护。希望您的排名表会比内存中的表小,但是MIN_SCORERANK上的索引可能会有帮助。

如果确定此联接是性能问题(请不要这样做,除非是you've measured a performance problem),则可以使用类似的查询来更新成员表中的排名,前提是它有一个RANK列:

代码语言:javascript
复制
UPDATE Members
SET RANK = (
    SELECT RANK
    FROM Ranks
    WHERE SCORE > MIN_SCORE
    AND MEMBER_ID = MEMBER_ID
    HAVING MAX(MIN_SCORE)
)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12484892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档