【问题标题】:Update Database upto 24 hours最多 24 小时更新数据库
【发布时间】:2014-08-22 16:22:15
【问题描述】:

我正在尝试制作一个命中计数器,我想在 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()

我在这个网站上搜索了很多,但我没有找到任何关于这个问题的答案,请帮忙,我该如何解决这个问题?

谢谢!

【问题讨论】:

标签: php mysql hitcounter


【解决方案1】:

首先,您需要将计时器的开始时间存储在某个地方。然后您可以在 PHP 中进行此检查。如果没有它,您将永远不会知道自上次检查以来真正过去了多少时间。

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

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 作业。

【讨论】:

    【解决方案2】:

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

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

    要更新您的点击次数,只需这样做

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

    这样,你不仅不需要重置计数器,而且你还有每日统计数据!!!

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

    如果您真的想使用用户的时区作为日期,它会变得更加复杂,我不建议您这样做。只需使用服务器的日期即可。

    更新: 根据您实际尝试实现的目标(您的问题没有告诉我们,您只询问了实施),有很多方法可以处理它。我的回答是使用 24 小时作为您想要每天重置计数器的提示来解释您的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-13
      • 2015-05-09
      • 2021-10-03
      • 2020-05-07
      • 2019-09-25
      相关资源
      最近更新 更多