最多24小时更新数据库

时间:2014-08-22 16:22:15

标签: php mysql hitcounter

我正试图制作一个点击计数器,我希望24小时收集总点击数。无论最终用户的时区如何,这24小时都应该是固定值。在24小时内,数据库应该以+1命中计数进行更新,一旦达到24小时时间刻度,应重置计时器。

以下是我正在尝试的内容:

$timer = TIME_NOW - 60*60*24;
if ($timer < TIME_NOW)

    $db->query("UPDATE settings SET value=value+1 WHERE name='hits_today'");
}
else
{
    $db->query("UPDATE settings SET value=0 WHERE name='hits_today'");
}

此处TIME_NOW是一个定义为time()

的常量

我已经搜索了很多这个网站,但是我没有找到这个问题的任何答案,请帮忙,我该怎么办呢?

谢谢!

2 个答案:

答案 0 :(得分:0)

首先,您需要存储计时器的开始时间。然后你可以在PHP工作中进行这项检查。如果没有它,你将永远不会知道自上次检查以来已经过了多少时间。

替代解决方案1:在DB中创建具有计时器值的字段。然后在设置表上创建ON UPDATE触发器,该触发器将检查时间,即i.E。如果是新的一天,请更新此时间,然后重置计数器。

DELIMITER $$
CREATE TRIGGER update_counter
AFTER UPDATE ON settings
FOR EACH ROW
BEGIN
   SET TIMER = (SELECT value FROM settings WHERE name='hits_timer' LIMIT 1);
   IF (TIMER < NOW() - INTERVAL 1 DAY) THEN
       UPDATE settings SET value=NOW() WHERE name='hits_timer';
       UPDATE settings SET value=0 WHERE name='hits_today';
   END IF;
END;
$$
DELIMITER ;

替代解决方案2:与第一个解决方案类似,但在某个特定小时(午夜,凌晨1点等)触发使用CRON作业。

答案 1 :(得分:0)

我有一个非常简单的解决方案,如果你愿意有一个专门用于hitcount的表而不是将你的hitcount存储在设置表中......

+----------+---------+------+-----+---------+-------+
| Field    | Type    | Null | Key | Default | Extra |
+----------+---------+------+-----+---------+-------+
| date     | date    | NO   | PRI | NULL    |       |
| hitcount | int(11) | YES  |     | NULL    |       |
+----------+---------+------+-----+---------+-------+

要更新您的hitcount,请执行

INSERT INTO `hitcount` VALUES (CURDATE(), 1) ON DUPLICATE KEY UPDATE hitcount = hitcount + 1;

这样,您不仅不需要重置计数器,而且每天都有统计数据!!!

注意:关于最终用户的时区,您无法从服务器端可靠地获取此信息(您可以尝试使用IP确定某人的位置,但它不可靠)。因此,您需要以某种方式从用户那里获取(例如,使用用户浏览器中的javascript,或者让用户输入此内容并将其保存在某处)

如果你真的想要将用户的时区用于日期,那么它可能会变得更加复杂,我不建议这样做。只需使用服务器的日期。

更新: 根据您实际想要实现的目标(您的问题没有给出我们,您只询问实施情况),有很多方法可以解决它。我的回答是使用24小时解释您的问题,作为您希望每天重置计数器的提示。