在櫃檯對於我們最近的一個項目,我們需要包括基於日期的計數器。例如用於answer.php頁面查看計數器在MySQL表被設定設置每天
稱爲counter
每日訪問answer.php
被限制爲150(頁面瀏覽)。表counter
將存儲每個訪問,並且每日津貼150結束時,它會發出警告,指出您超出了限制並阻止顯示。
,但我無法弄清楚如何能每天的基礎上進行。我的意思是當第二天啓動計數器如何復位,並開始從0
在櫃檯對於我們最近的一個項目,我們需要包括基於日期的計數器。例如用於answer.php頁面查看計數器在MySQL表被設定設置每天
稱爲counter
每日訪問answer.php
被限制爲150(頁面瀏覽)。表counter
將存儲每個訪問,並且每日津貼150結束時,它會發出警告,指出您超出了限制並阻止顯示。
,但我無法弄清楚如何能每天的基礎上進行。我的意思是當第二天啓動計數器如何復位,並開始從0
的CURDATE函數返回當前的日期,所以類似這樣的東西:
$sql = "SELECT count(*) from logintable where 'logindate' = CURDATE()";
我知道您的查詢可能會涉及更多的表格和字段。這是一個非常簡單的我的頭頂未經測試的答覆,我不知道它甚至工作。只是在這裏大聲思考。
你需要它映射日期瀏覽量表
從@stefgosselin答案是你想要做的第一件事情;那麼如果計數是< 150,則插入一行。如果計數爲150或更多,請拒絕查詢並告訴他們已達到其閾值。
它是每個用戶150頁???無論誰是總共。如果它是每個用戶,那麼它應該像添加一個計數器到該用戶的記錄一樣簡單,並且每次有可數的「請求」進入時都會不斷增加,並根據需要查看該計數以防止結果受限。
接下來,因爲用戶沒有的(甚至通過一些觸發)背約會他/她的要求,在每一天的開始,您只需更新表格對所有罪狀復位至零路...
更新用戶登錄表設置RequestCount = 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表中清除過去的日子。
你不需要這樣的表。你只需要保存最後的日期。 – Hossein 2011-05-31 13:23:51
當然,但最終你會在db中寫一些東西。因此,您還可以保留數據用於統計目的 – Raffaele 2011-05-31 13:28:56
然後,您最好保留max,avg,無論您需要什麼,並從表格中刪除個別訪問歷史記錄。想象一個擁有1000頁每日1M觀看次數的網站。這樣的歷史表很快填滿了空間! – Hossein 2011-05-31 13:31:55