2012-02-01 70 views
2

想要建立一个积分系统来检查用户有多少积分,并给他们一个特定的标题。需要一些关于php积分系统的指导

我已经准备好了一个表格,php脚本可以在检查哪个标题应该提供给成员时参考。

MYSQL表结构如下:
名称:PTB
结构:分,标题

举例来说,如果你有100点,你获得的称号 - “老兵”,如果你有500点,你获得了“专业”的称号。假设我有点数:100,标题:退伍军人点数:500,标题:proptb表。

但是我偶然发现了一个混淆的事实。
我如何使用php来确定使用ptb表数据给予用户哪个标题?

如果用户有等于或大于 100点,将获得老兵的冠军,但500是也超过了100这意味着PHP脚本也需要确保它低于500pts。

我仍然不知道如何使用PHP来做到这一点。因为我自己感到困惑。 我希望有人能够理解并提供给我一些指导。

谢谢!

回答

3

您可以选择所有记录数足够的记录,将排名最高的记录排在最前面,然后删除其余记录。

SELECT title FROM ptb WHERE pts <= $points ORDER BY pts DESC LIMIT 1 
+0

谢谢PiTheNumber!但即时通讯想知道如果这个工程,如果用户有100分,并且这个查询查找> = 100,这意味着500也将包括? – sm21guy 2012-02-01 09:35:44

+0

@ sm21guy:不会导致他在查询中添加LIMIT 1 – Nikola 2012-02-01 09:38:35

+0

我修正了一个错误。你必须使用<=否则用101分,你会得到更高的标题... – PiTheNumber 2012-02-01 09:42:27

2

由于积分将随时间而改变和复式用户可以有相同的标题(如果您想检索多个用户头衔PiTheNumber的解决方案并不能很好地工作),这听起来像这应该是2个表:

CREATE TABLE users (
    userid ...whatever type, 
    points INTEGER NOT NULL DEFAULT 0 
    PRIMARY KEY(userid) 
); 
CREATE TABLE titles (
    title VARCHAR(50), 
    minpoints INTEGER NOT NULL DEFAULT 0 
    PRIMARY KEY (title), 
    UNIQUE INDEX (minpoints) 
); 

然后....

SELECT u.userid, u.points, t.title 
FROM users u, titles t 
WHERE u.points>=t.minpoints 
AND ....other criteria for filtering output.... 
AND NOT EXISTS (
    SELECT 1 
    FROM titles t2 
    WHERE t2.minpoints>=u.points 
    AND t2.minpoints<=t.minpoints 
); 

(有一请输入other ways来填写查询)