2011-05-31 122 views
3

在櫃檯對於我們最近的一個項目,我們需要包括基於日期的計數器。例如用於answer.php頁面查看計數器在MySQL表被設定設置每天

稱爲counter

每日訪問answer.php被限制爲150(頁面瀏覽)。表counter將存儲每個訪問,並且每日津貼150結束時,它會發出警告,指出您超出了限制並阻止顯示。

,但我無法弄清楚如何能每天的基礎上進行。我的意思是當第二天啓動計數器如何復位,並開始從0

回答

2

的CURDATE函數返回當前的日期,所以類似這樣的東西:

$sql = "SELECT count(*) from logintable where 'logindate' = CURDATE()"; 

我知道您的查詢可能會涉及更多的表格和字段。這是一個非常簡單的我的頭頂未經測試的答覆,我不知道它甚至工作。只是在這裏大聲思考。

-1

你需要它映射日期瀏覽量表

+0

你不需要這樣的表。你只需要保存最後的日期。 – Hossein 2011-05-31 13:23:51

+0

當然,但最終你會在db中寫一些東西。因此,您還可以保留數據用於統計目的 – Raffaele 2011-05-31 13:28:56

+0

然後,您最好保留max,avg,無論您需要什麼,並從表格中刪除個別訪問歷史記錄。想象一個擁有1000頁每日1M觀看次數的網站。這樣的歷史表很快填滿了空間! – Hossein 2011-05-31 13:31:55

0

從@stefgosselin答案是你想要做的第一件事情;那麼如果計數是< 150,則插入一行。如果計數爲150或更多,請拒絕查詢並告訴他們已達到其閾值。

0

它是每個用戶150頁???無論誰是總共。如果它是每個用戶,那麼它應該像添加一個計數器到該用戶的記錄一樣簡單,並且每次有可數的「請求」進入時都會不斷增加,並根據需要查看該計數以防止結果受限。

接下來,因爲用戶沒有的(甚至通過一些觸發)背約會他/她的要求,在每一天的開始,您只需更新表格對所有罪狀復位至零路...

更新用戶登錄表設置RequestCount = 0

完成。

0

您創建一個表名爲loginlog(日誌所有登錄)

table loginlog 
    id integer autoincrement primary key 
    user_id integer 
    logindate date 
    logincount integer 

唯一鍵userdate(USER_ID,logindate)

接下來你對你的表

創建一個更新之前觸發
DELIMITER $$ 

CREATE TRIGGER bu_loginlog_each BEFORE UPDATE ON loginlog FOR EACH ROW 
BEGIN 
    /*Force an error by selecting from a non-existing table*/ 
    /*this will prevent the update*/ 
    IF new.logincount > 150 THEN SELECT * FROM create_error_only_150_logins_allowed 
END $$ 

DELIMITER ; 

在你的PHP代碼執行以下操作:

INSERT INTO loginlog (user_id, logindate, logincount) 
    VALUES ('$user_id',curdate(),1) 
    ON DUPLICATE KEY UPDATE logincount = logincount + 1 

測試插入是否成功。
如果插入/更新失敗,您的用戶已登錄> 150次,您可以拒絕用戶。

這將只保留每個用戶每天一個記錄。您甚至可以在x天后從loginlog表中清除過去的日子。