【问题标题】:Reseting MySql column value each month每月重置 MySql 列值
【发布时间】:2016-09-12 12:46:09
【问题描述】:

我想知道是否有任何方法可以每个月在 MySql 中重置一个值。就像假设我有一个点列,它的 4 月值为 500。当新月份开始时,我希望 MySql(或任何需要的)将该值重置回 0,以便每个新月份值为 0。有什么可能的方法来做到这一点?一般来说,我对 MySQL 和 PHP 很陌生,所以我不太确定在这里做什么?有人可以帮我吗?谢谢大家!

最好的问候

【问题讨论】:

  • 为此使用 MySQL 事件。
  • @juergend 你能以答案的形式给我一个例子,以便我接受吗? :) PhiterFernandes 不确定你的意思是什么?
  • 您可以在基于 linux 的服务器中使用 cronjob 执行 mysql 命令行更新查询。
  • @smozgur 你能用一个例子回答一个答案,以便我看看它是否有效吗?
  • 这是一个奇怪的要求。闻起来像非常糟糕的设计。

标签: php mysql reset


【解决方案1】:

您可以使用 MySQL 事件调度程序

delimiter //
CREATE EVENT your_event ON SCHEDULE 
       EVERY 1 MONTH
       STARTS '2016-05-01 00:00:00'
       ON COMPLETION PRESERVE ENABLE
    DO
      update your_table set ...;
//

【讨论】:

  • 这是一回事吗?只需在 MySQL 上运行该查询,它是否真的有效?
  • 是的,就是这么简单。
【解决方案2】:

用于更新 dbName 数据库中 tableName 表中的 fieldName 字段的 My SQL 命令行;

mysql -uDBUserName -pDBPassword -e 'UPDATE tableName SET fieldName = 0' dbName

每个月第一天的cronjob:

* * 1 * *  mysql -uDBUserName -pDBPassword -e 'UPDATE tableName SET fieldName = 0' dbName

您可能需要查询中的条件。这只是一个示例。

【讨论】:

  • cron给那只猫剥皮的许多方法之一!这个暴露了 crontab 中的 uname/pwd ......这带来了一系列安全问题。
  • 肯定会 - 当有人入侵你的 linux 服务器时,是的。
  • 不只是在 crontab 中:命令行参数可能会在进程列表中暴露给系统的其他(有效)用户...
  • 我并不是说这是安全的——我是说 crontab 可以做到这一点。事实上,命令行可以保存在一个受限制的文件中,然后从那里执行以获得更好的安全性。如前所述,有很多方法可以做到这一点。实际上我投票给了我以前从未使用过的事件调度程序。我自己试试看效果。
  • 我们玩得很开心,@perkes456 :)
【解决方案3】:

有一个窍门,我知道只有当你不想保留过去几个月的旧值时,这种简单的方法才有用。

下面是我的窍门:

  • 首先将月份设置为 01 -31
  • 如果您愿意,可以将年份设置为当前年份(如果值在 12 或 13 个月后更新)
  • 但如果值通常在几天或 12 个月以下更新,则可以

以下技巧:

$start_date = date('Y-m-01 00:00:00');
$end_date   = date('Y-m-31 23:59:59');

调用你最后一个值的最后更新

$result = $db->query("SELECT value, value_update FROM $value_table);
while($message = $result->fetch_assoc()){
$prev_value =$message['value'];
$value_update =$message['value_update'];
}

然后创建一个 if 语句,其中包含您在数据库中的值的最后更新日期,范围为月份

   if($value_update >= $start_date && $value_update <= $end_date) {
$value = $prev_value + $new_value;
    }
  else{
$value = round($prev_value - $prev_value) +$new_value;
  }

最后更新你的数据库

$update = mysqli_query($db, "UPDATE ".$value_table." SET value='".$value."'");

当用你的最后一个值在同一个月用一个新值更新你的数据库表时,这个几乎没有技巧,然后保留最后一个值 + 新值, 但是,例如,如果您的最后一个值是 2 月 29 日,而现在新值是 3 月 1 日,则 db reset 上的值 + 新值即平均值(0 + 新值)。

如果您想在没有 cronjob 的情况下更新 API 密钥调用之类的内容,仅当您的值是更新您的数据库并且对于保留每个月的统计数据并不重要时,此技巧很有用。

【讨论】:

    猜你喜欢
    • 2014-11-24
    • 2011-10-22
    • 1970-01-01
    • 2015-03-01
    • 2017-05-14
    • 1970-01-01
    • 2012-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多