我正在尝试构建一个点系统,用于检查用户拥有多少积分并为其提供特定标题。
我准备了一个表格,当检查哪个标题应该给成员时,php脚本可以参考该表格。
MYSQL表结构如下:
名称:ptb
结构:pts,title
例如,如果你有100分,你就获得了冠军 - “退伍军人”,如果你有500分,你就获得了“职业”头衔。假设我在 ptb表中有 pts:100,title:veteran 和 pts:500,title:pro 行。
然而我偶然发现了一个令人困惑的事实
如何使用php来确定使用ptb表数据给用户的标题?
如果用户等于或高于 100分将获得退伍军人作为标题但是也超过 100这意味着php脚本还需要确保它低于500pts。
我仍然不确定如何使用php来做到这一点。因为我很困惑自己。 我希望有人能够理解并为我提供一些指导。
谢谢!
答案 0 :(得分:3)
您选择所有带有enought积分的记录,将得分最高的记录排在最前面并删除其余记录。
SELECT title FROM ptb WHERE pts <= $points ORDER BY pts DESC LIMIT 1
答案 1 :(得分: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来编写查询)