当有人第一次访问X页面时,我使用当前的unix time()标记在表格中插入一个新行。
我想每24小时为该用户插入新行..例如:
示例A)鲍勃,去我的网站,它插入一行.. 12小时后,鲍勃回来,它没有插入新行,因为24小时尚未过去。
示例B)鲍勃,去我的网站,它插入一行.. 24小时后,鲍勃回来,它已经过了24小时就插入了新行。
我正在四处寻找这个,但由于我的大脑被炒了,所以无法想象这是否正确。
$time = time();
$difference = 86400;
$timedifference = $time + $difference;
插入行时:
mysql_query("INSERT INTO `logs` (`time`, `who`, `site`, `type`)
VALUES('" . $timedifference . "', '" . $ip . "', '" . $rid . "', 'out') ")
or die(mysql_error());
检查是否已经24小时或更长时间:
mysql_query("SELECT * FROM `logs`
WHERE `time` < '" . time() . "' AND `type` = 'out'
AND `site` = '" . $rid . "' AND `who` = '" . $ip . "'");
有人可以告诉我它是否正确?
答案 0 :(得分:2)
这是我想出来的......似乎有效:
//log check
$ip = ip2long($_SERVER['REMOTE_ADDR']);
$time = time(); //current time
$difference = 86400; //one day in seconds
$timedifference = $time + $difference; //time difference
$logQ = mysql_query("SELECT * FROM `logs` WHERE `time` > '" . time() .
"' AND `type` = 'out' AND `site` = '" . $id .
"' AND `who` = '" . $ip . "'");
$logR = mysql_num_rows($logQ);
if ($logR <= 0){
mysql_query("INSERT INTO `logs` (`time`, `who`, `site`, `type`) VALUES('" .
$timedifference . "', '" . $ip . "', '" . $id . "', 'out') ") or
die(mysql_error());
}
答案 1 :(得分:1)
尝试
insert ignore into logs
select unix_timestamp(now()), who, site, type
from logs
where
who='{$ip}' and
site='{$rid}' and
type='out' and
unix_timestamp(time)<=unix_timestamp(now())-86400 limit 1;
并检查是否有返回affected_rows,
如果是这样,意味着添加了新日志。
答案 2 :(得分:0)
$time
,而不是$timedifference
。time
是否小于time() - 86400
。如果您将time
列为datetime
列,则可以直接在查询中执行此操作。答案 3 :(得分:0)
在上一次查询中,您没有检查是否有超过24小时的条目,您只是检查是否有比NOW更旧的条目。
正确的程序是:
在登录时间的记录上创建索引
对于用户('who'),按此升序索引选择最后一条记录
如果有最后一个,并且距离现在不到24小时(时间()),则跳过创建新记录。
否则,立即创建一个(time())。