【问题标题】:Reset MySQL value every day with PHP每天使用 PHP 重置 MySQL 值
【发布时间】:2016-01-08 04:47:33
【问题描述】:

我正在尝试制作一个 PHP 命中计数器,将命中保存到 MySQL。如果我能以某种方式对每一天进行计数,那将是最好的,但到目前为止,我还没有想出如何做到这一点而不会太复杂。 所以,现在(除非这里有人有上面的解决方案^)我想每天在 00:00 重置 MySQL 中的“今日点击”。 我似乎找不到一种方法来安排它在每天 00:00(格林威治标准时间 0,英国时间)自动执行。

【问题讨论】:

  • 您可以通过 cron 作业来完成它
  • 所以您宁愿将计数器重新设置为零,也不愿做必要的工作让查询为您获取该信息?重新设置为零意味着您没有历史数据可以返回到正确的位置?
  • 为什么不是每天都有一行数据?那么您只需将值添加到现有行,如果“今天”不存在,则插入新行。
  • 我该怎么做,@Jeff?

标签: php mysql


【解决方案1】:

你有两个解决方案:

使用 mysql 的事件调度器

CREATE EVENT 
ON SCHEDULE EVERY 1 DAY
STARTS '2015-01-07 00:00:00'
DO
[SQL for reset the value here];

其他解决方案是使用 PHP 脚本并使用 cron 执行它

#!/usr/bin/env php
<?php
[PHP script for reset the value here]

然后,将其添加到 cron 作业中

 0 22 * * * /usr/bin/php -f /usr/local/bin/my-daily-script.php &> /dev/null

(您可以将 22 更改为其他小时值)

【讨论】:

    【解决方案2】:

    Giancarlo 绝对正确地回答了您的问题,
    但我建议采用不同的方法:

    有一个带有字段的“命中”表

    hitsDate (date) | hits (int)
    ----------------------------------
    2015-01-06    | 329
    2015-01-05    | 0
    

    每次您想添加点击时(可能是在登录时?还是在会话开始时?)与当前日期比较:

    Update hits_table set hits=hits+1 where hitsDate=curdate()
    

    如果这返回错误或 false,则没有要更新的行,因此我们插入一个包含当前日期和第一次命中的新行:

    Insert into hits_table (hitsDate, hits) values (curdate(), 1)
    

    现在您可以查看任何一天的热门歌曲,可以制作漂亮的图表,...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-24
      • 2011-06-13
      • 1970-01-01
      • 2016-09-12
      • 1970-01-01
      • 1970-01-01
      • 2017-05-14
      • 1970-01-01
      相关资源
      最近更新 更多