Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 每月重置MySql列值_Php_Mysql_Reset - Fatal编程技术网

Php 每月重置MySql列值

Php 每月重置MySql列值,php,mysql,reset,Php,Mysql,Reset,我想知道是否有任何方法可以在MySql中每月重置一个值。比如说我有一个points列,它在四月的值是500。当新的一个月开始的时候,我希望MySql(或者任何需要的东西)将该值重置回0,这样每个新的月份该值都是0。有哪些可能的方法可以做到这一点?一般来说,我对MySQL和PHP比较陌生,所以我不确定在这里该做什么?有人能帮我吗?谢谢大家 向您致意您可以使用MySQL事件调度器 delimiter // CREATE EVENT your_event ON SCHEDULE EVE

我想知道是否有任何方法可以在MySql中每月重置一个值。比如说我有一个points列,它在四月的值是500。当新的一个月开始的时候,我希望MySql(或者任何需要的东西)将该值重置回0,这样每个新的月份该值都是0。有哪些可能的方法可以做到这一点?一般来说,我对MySQL和PHP比较陌生,所以我不确定在这里该做什么?有人能帮我吗?谢谢大家


向您致意

您可以使用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事件调度器

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 ...;
//

dbName数据库中tableName表中更新fieldName字段的我的SQL命令行

mysql -uDBUserName -pDBPassword -e 'UPDATE tableName SET fieldName = 0' dbName
每月第一天的cronjob:

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

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

dbName数据库中tableName表中updatefieldname字段的mysql命令行

mysql -uDBUserName -pDBPassword -e 'UPDATE tableName SET fieldName = 0' dbName
每月第一天的cronjob:

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

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

有一个技巧,我知道这不是一个简单的方法,只有当您不想保留过去几个月的旧值时,它才有用

下面是我的诀窍:

  • 首先设置从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;
  }
在使用上一个值在同一个月使用新值更新db表时,使用此技巧,然后保留上一个值+新值, 但是,例如,如果您的上一个值是在2月29日,而现在新值是在3月1日,则db reset上的值+新值的平均值(0+新值)


如果您想在不使用cronjob的情况下更新API键调用之类的内容,则此技巧非常有用,仅当您的值是update-your-db并且不需要每个月都保存统计信息时才使用

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

下面是我的诀窍:

  • 首先设置从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;
  }
在使用上一个值在同一个月使用新值更新db表时,使用此技巧,然后保留上一个值+新值, 但是,例如,如果您的上一个值是在2月29日,而现在新值是在3月1日,则db reset上的值+新值的平均值(0+新值)



如果您想在不使用cronjob的情况下更新API键调用之类的内容,则此技巧非常有用,仅当您的值是update-your-db并且不需要每个月都保存统计信息时才使用

使用MySQL事件。@juergend你能给我一个答案形式的例子,让我接受吗?:)PhiterFernandes不知道你的意思是什么?你可以在基于linux的服务器上用cronjob执行mysql命令行更新查询。@smozgur你能用一个例子来回答吗?这样我就可以看看它是否有效了?这是一个奇怪的要求。闻起来很糟糕的设计。使用MySQL事件来解决这个问题。@juergend你能给我一个答案形式的例子让我接受吗?:)PhiterFernandes不知道你的意思是什么?你可以在基于linux的服务器上用cronjob执行mysql命令行更新查询。@smozgur你能用一个例子来回答吗?这样我就可以看看它是否有效了?这是一个奇怪的要求。闻起来很糟糕的设计。用
cron
剥猫皮的多种方法之一!这一个暴露了crontab中的uname/pwd。。。当然,当有人入侵你的linux服务器时,是的。不仅仅是在crontab中:命令行参数可能会在进程列表中暴露给系统的其他(有效)用户…我不是说这是安全的-我是说crontab可以做到这一点。事实上,命令行可以保存在一个受限制的文件中,然后从那里执行,以提高安全性。如前所述,有很多方法可以做到这一点。事实上,我投了事件调度器的票,我以前从未使用过它。我自己试试看。我们玩得很开心,@perkes456:)用
cron
剥那只猫皮的众多方法之一!这一个暴露了crontab中的uname/pwd。。。当然,当有人入侵你的linux服务器时,是的。不仅仅是在crontab中:命令行参数可能会在进程列表中暴露给系统的其他(有效)用户…我不是说这是安全的-我是说crontab可以做到这一点。事实上,命令行可以保存在一个受限制的文件中,然后从那里执行,以提高安全性。如前所述,有很多方法可以做到这一点。事实上,我投了事件调度器的票,我以前从未使用过它。我自己来试试看。我们玩得很开心,@perkes456:)