秩表
排名表
在我的班级中,我存储了排名--与排名表中的排名相匹配--并关联了最低分数;排名为键,MINIMUM_SCORE为值。
当一个成员的分数(XP)被更新(上/下)时,我想根据下面的数组测试更新的分数,以确定他们的排名是否也需要更新。
private $scores = array('3' => '12116', '2' => '15146', '1' => '18932',);使用更新的分数,如何从上面的数组中确定相关的等级?
所有的事情都是开放的,这是我第一次创建一个排名系统,所以我希望能把它做好:)
发布于 2012-09-18 21:10:57
好的,给出这些表:
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 |
+-----+-------------+您可以通过以下方法获得一个成员加上他们的级别:
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_SCORE和RANK上的索引可能会有帮助。
如果确定此联接是性能问题(请不要这样做,除非是you've measured a performance problem),则可以使用类似的查询来更新成员表中的排名,前提是它有一个RANK列:
UPDATE Members
SET RANK = (
SELECT RANK
FROM Ranks
WHERE SCORE > MIN_SCORE
AND MEMBER_ID = MEMBER_ID
HAVING MAX(MIN_SCORE)
)https://stackoverflow.com/questions/12484892
复制相似问题