2010-10-23 103 views
0

我如何才能每小時保存一次profilevisit?因此,如果您在10:10訪問過,那麼當您在12:10查看個人資料時它不會保存?php:只有註冊訪問每小時1次

我的代碼,現在可以節省evrytime您訪問:

$date = time(); 
$BuID= mysql_real_escape_string($v["id"]); 
$uID= mysql_real_escape_string($showU["id"]); 
mysql_query("INSERT INTO users_profilevisits (uID, BuID, date) VALUES ('$uID', '$BuID', '$date')") or 
       die(mysql_error()); 

更新

function save(){ 
     mysql_query("INSERT INTO users_profilevisits (uID, BuID, date) VALUES ('$uID', '$BuID', '$date')") or 
       die(mysql_error()); 
    $_SESSION['saved']=time(); 
} 

if(isset($_SESSION['saved'])){ 
    $time = time(); 
    if($time-$_SESSION['saved'] > 3600){ 
     save(); 
     } 
}else{ 
    save(); 
} 

回答

3

選擇時間戳和有條件的基於時間戳保存執行。或者,設置會話變量並根據該值有條件地執行。

if(isset($_SESSION['saved']){ 
    $time = time(); 
    if($time-$_SESSION['saved'] > 3600){ 
     save($uid,$buid); 
}else{ 
    save($uid,$buid); 

function save($uid,$buid){ 
    //save stuff here 
    $_SESSION['saved']=time(); 
} 
+0

所以我應該在插入到數據庫後存儲會話變量。然後檢查會話變量是否設置(爲了執行查詢)?但是,我如何才能在會話變量上持續一個小時?快速示例? – Johnson 2010-10-23 13:41:40

+0

添加一些代碼到我的答案 – Orbit 2010-10-23 13:45:43

+0

我得到了很多的錯誤,但我修復了他們,現在我沒有得到任何錯誤。它仍然無法正常工作。請參閱代碼 – Johnson 2010-10-23 14:13:17

3

如果你總是設定的規定時間的分鐘/秒爲0,可以創造超過日期打造專業化的關鍵,所以它不會是能夠在一個小時內插入超過1排(沒有任何檢查,會話變量或子查詢)。

如果您需要進一步操作的分鐘數/秒,請創建一個用於實現所述方法的新列。

假設如下表:

date INT(11) 
uID INT(11) 
BuID INT(11) 
date2 TIMESTAMP 
UNIQUE KEY `BuID` (`BuID`,`date2`) 

以下查詢應該符合你的需求:

INSERT INTO users_profilevisits (uID, BuID, date, date2) 
VALUES ('$uID', '$BuID', '$date',FROM_UNIXTIME(UNIX_TIMESTAMP(),'%Y%m%d%H0000')) 

當你有過打造專業化和date2的唯一密鑰(date2的將有電流的值時間與分鐘和秒設置爲0),它將無法插入具有相同日期的重複行2 + BuID

但是,您必須刪除or die() ,因爲如果你嘗試插入一個重複的鍵,這會導致錯誤。

使用此方法,您不需要編程邏輯,表結構itsselve將爲您完成工作。

+0

你好。你的第一種方法,我不能工作,因爲我想讓用戶看到他的舊日期。 – Johnson 2010-10-23 13:48:40

+0

而不是10行,因爲他在一個小時內訪問了10次,它應該只是第一次註冊。 – Johnson 2010-10-23 13:49:22

+0

編輯我的帖子,希望現在更加合理。 – 2010-10-23 14:26:20

0

只需給MySQL表添加一個字段並將其設置爲唯一。保存訪問時,將「visitoruserid + year + month + day + hour」等字符串保存到該字段。這種方式MySQL只處理每個用戶每小時一個,而不需要額外的PHP代碼,會話和時間檢查。

編輯:

Add。好處:如果您稍後選擇鬆開「每小時一次」條件或將其更改爲每天一次或添加更多條件,則只需更改保存到該字段的字符串,而無需對代碼進行任何更改。