Php 仅当当天和该用户的行不存在时才插入行
当有人第一次访问X页面时,我会在表中插入一个带有当前unix time()戳的新行 我想每24小时为该用户插入新行。。例如: 示例A)Bob,转到我的站点,它插入一行。。12小时后,Bob回来了,它没有插入新行,因为24小时还没有过去 示例B)Bob,转到我的站点,它插入一行。。24小时后,Bob回来了,24小时过去了,它确实插入了一个新行 我在玩弄这个,但由于我的大脑被炸了,我无法思考这是否正确Php 仅当当天和该用户的行不存在时才插入行,php,mysql,time,Php,Mysql,Time,当有人第一次访问X页面时,我会在表中插入一个带有当前unix time()戳的新行 我想每24小时为该用户插入新行。。例如: 示例A)Bob,转到我的站点,它插入一行。。12小时后,Bob回来了,它没有插入新行,因为24小时还没有过去 示例B)Bob,转到我的站点,它插入一行。。24小时后,Bob回来了,24小时过去了,它确实插入了一个新行 我在玩弄这个,但由于我的大脑被炸了,我无法思考这是否正确 $time = time(); $difference = 86400; $timediffere
$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 . "'");
mysql\u查询(“从'logs'中选择*
其中'time`<'.time().''和'type`='out'
以及"site `='“$rid.”和"who `='“$ip.”;
谁能告诉我这是不是对的
$time
,而不是$timedifference
time
是否小于time()-86400
。如果创建了time
adatetime
列,则可以直接在查询中执行此操作在上一次查询中,您没有检查是否有超过24小时的条目,您只是检查是否有比现在旧的条目 正确的程序是: 在登录时间的记录上创建索引。
通过此升序索引为用户(“谁”)选择最后一条记录。
如果有最后一条记录,并且距离现在不到24小时(time()),则跳过创建新记录。
否则,现在就创建一个(time())。试试看
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;
在日志中插入忽略
选择unix_时间戳(now())、用户、站点、类型
从日志
哪里
谁=“{$ip}”和
site='{$rid}'和
键入“out”和
unix_timestamp(time)这是我想到的。。这似乎有效:
//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());
}
//日志检查
$ip=ip2long($_服务器['REMOTE_ADDR']);
$time=time()//当前时间
$difference=86400//以秒计一天
$timedifference=$time+$difference//时差
$logQ=mysql\u查询(“从`logs`中选择*WHERE`time`>”。time()。
“'和'type`='out'和'site`='”$id。
“'和'who`='”$ip.“”;
$logR=mysql\u num\u行($logQ);
如果($logR)时间
字段有什么类型?很好,请确保web服务器和数据库服务器的时间都是synchronized@ajreal:NTP在这方面非常有效-您甚至可以让一台服务器与另一台服务器同步。但这是一个非常不同的问题:)