2010-10-23 113 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。好处:如果您稍后选择松开“每小时一次”条件或将其更改为每天一次或添加更多条件,则只需更改保存到该字段的字符串,而无需对代码进行任何更改。