2012-02-01 53 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來填寫查詢)