我需要在数据库中保留一个字段并以某种方式更新它,然后稍后我需要检查该时间是否超过 30 分钟,如果不是,距离 30 分钟还有多长时间?
我将使用 PHP+MySql 来做这件事,谁能告诉我最简单的方法?
谢谢!!
我可以将所有插入和更新 MySql 调用包装在一个函数中,如下所示:
function MySqlQuery($query, $res){
$result = mysql_query($qs, $res);
if($result === false){
mysql_query("QUERY STRING TO UPDATE FIELD IN DATABASE WITH NEW TIME", $res);
}
return $result;
}
用实际的更新查询替换“用新时间更新数据库中的字段的查询字符串”,你应该很高兴。
我所做的是,在最新记录上加上时间戳。使用 MySQL Query 提取最新记录,然后使用 mysql fetch 数组函数获取最后一条记录的时间。使用仅随时间更新的数据库也是如此。
您将能够使用将当前时间与记录时间进行比较的函数来操纵该时间。从那里您可以显示自上次发布以来的时间,如果超过 30 分钟,您可以让它回显一条消息。
$currenttime = /* PHP Time Formatting you wish to use. */
$query = mysql_query("SELECT time FROM database");
$row = mysql_fetch_array($query);
echo "Last Record Posted @" . $row['time'];
$timesince = $currenttime - $row['time'];
echo "Time Since Last Post:" . $time - $row['time'];
if($timesince >= "30"){
echo "Over 30 Minutes!";
}
如果您有任何问题,请告诉我。上面的代码应该让您了解它是如何工作的,但这是一个粗略的示例。
祝你好运!!
编辑:::
抱歉,我看错了问题,您仍然需要将时间输入数据库。您仍然可以使用上面的代码来拉时间,看看是否大于 30 分钟。
有关时间戳,请查看PHP 时间手册。您需要为 MySQL 输入和我上面发布的代码选择相同的时间格式。
假设您想知道表中的最后一次更新/插入发生在多长时间前。
您可以使用带有 on update 子句的时间戳字段设置表
CREATE TABLE foo (
id int auto_increment,
ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
primary key(id),
key(ts)
)
然后查询ts中值最大的记录
SELECT
TIMEDIFF(Now()-Interval 30 Minute, ts)
FROM
foo
ORDER BY
ts DESC
LIMIT
1
编辑:如果您想获取在过去 12 小时内插入/修改的所有记录,这也有效。
SELECT
TIMEDIFF(Now()-Interval 30 Minute, ts)
FROM
foo
WHERE
ts > Now()-Interval 12 hour
ORDER BY
ts DESC
编辑2:您也有可能对http://dev.mysql.com/doc/refman/5.1/en/show-table-status.html感兴趣:
SHOW TABLE STATUS 返回以下字段:
...
Update_time
上次更新数据文件的时间。对于某些存储引擎,此值为 NULL。例如,InnoDB 在其表空间中存储了多个表,并且数据文件时间戳不适用。对于 MyISAM,使用数据文件时间戳;但是,在 Windows 上,时间戳不会被更新更新,因此该值不准确。