2010-03-03 48 views
0

我不習慣與應遞減每次延時像一個警告用戶價值的工作,例如,警告這對於30 days,可以達到的3 warns最大值堅持用戶得到禁止前管理用戶警告

我想設計這樣一個用戶表,但現在我應該在它的工作,我發現在遞減值每30天就沒有什麼用處:

table_user 
- username 
- email 
- warnings (integer) 
- last_warn (timestamp data type) 

我應該使用一些PHP計時器?

對用戶警告是否存在任何標準技術?

回答

1

正常化你的表,從用戶爆發的警告,如:

Table: Users 
UserID int auto generate PK 
UserName 
UserEmail 

Table: UserWarnings 
UserID 
WarningDate 

你現在可以編寫一個查詢,以確定是否有在過去30天內進行3個警告。發生「警告」時運行此查詢,並且如果返回一行,則禁止該用戶。

查詢會是這個樣子:

SELECT 
    COUNT(*) 
    FROM UserWarnings 
    WHERE UserID=...your user id... AND WarningDate>=...current date time... 
    HAVING COUNT(*)>2 

通過進行警告表,你可以保持一個完整的警告歷史,這可能是有用的。

+0

我喜歡它,也許是因爲我喜歡正常化的方法!謝謝大家! – vitto 2010-03-03 18:26:39

2

你可以創建另一個表

User_warnings: 
    user_id 
    warn_timestamp 

每當用戶警告,你先刪除30天以上的所有條目,那麼你是否還存在兩個或兩個以上的警告。然後禁止用戶。

如果您需要關於所有警告的歷史記錄,請不要刪除舊警告,而只是在過去30天內查詢警告。

這樣你不必每天減少,但只需要檢查何時出現另一個警告。

1

我相信真的沒有標準的用戶預警系統設計。 「三次罷工,你出去」是一種典型的方法,但並不總是最好的。例如,如果我在我的網站上有N條規則,並且我們會說這些規則的K是嚴重違規行爲,那麼我認爲不是那麼嚴重的違規行爲會發起三次罷工。但是,嚴重的犯罪行爲可能是汽車或者是兩次罷工?

如果我必須建立這樣的事情,我會創建一個看起來像這樣的表:

user_warnings: 
- warning_id 
- user_id 
- created_at 
- offense_level 

,然後也許有一個查詢設立在那裏你可以發現有一筆罪行的任何用戶在最後的T天內,這些數字大於或等於可禁止犯罪等級的數值。如果他們的總進攻水平超過了推薦值,請禁止用戶。我認爲將進攻等級設置爲5,並且具有分層次的進攻。

不要刪除過去的犯罪,但我認爲。你永遠不知道什麼時候記住之前發生的事情是很重要的,記錄它是很好的。只要確保此查詢僅檢查小於30天的日期(或者您可以設置警告的天數過多)。