每月重置MySql列值

时间:2016-05-16 16:32:58

标签: php mysql reset

我想知道是否有办法在每个月重置MySql中的值。就像我们说的那样,我有一个积分列,其四月的价值是500.当新月开始时,我希望MySql(或其他任何需要的东西)将该值重置为0,以便每个新的月份值为0.有什么方法可以做到这一点?我对MySQL和PHP很新,所以我不确定该怎么做?有人可以帮我吗?谢谢大家!

祝你好运

3 个答案:

答案 0 :(得分:4)

您可以使用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 ...;
//

答案 1 :(得分:2)

我的SQL命令行,用于dbName数据库中tableName表中的update fieldName字段;

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

每个月第一天的cronjob:

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

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

答案 2 :(得分:0)

有一个窍门,我知道,仅当您不关心保留过去几个月的旧值时,简单的方法才有用。

以下是我的把戏:

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

以下技巧:

eureka.initialInstanceInfoReplicationIntervalSeconds

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

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

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

$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($value_update >= $start_date && $value_update <= $end_date) {
$value = $prev_value + $new_value;
    }
  else{
$value = round($prev_value - $prev_value) +$new_value;
  }

在用您的最后一个值在同一个月中用一个新值更新您的数据库表,然后保留最后一个值+新值时,用这个技巧就很难了 但是,例如,如果您的最后一个值是2月29日,而现在的新值是3月01日,则是db reset上的值+平均值的新值(0 +新值)。

仅当您的值是更新数据库时,并且不保留每个月的统计信息不重要时,如果您想在不使用cronjob的情况下更新API按键调用之类的方法时,此技巧很有用。