我想知道是否有办法在每个月重置MySql中的值。就像我们说的那样,我有一个积分列,其四月的价值是500.当新月开始时,我希望MySql(或其他任何需要的东西)将该值重置为0,以便每个新的月份值为0.有什么方法可以做到这一点?我对MySQL和PHP很新,所以我不确定该怎么做?有人可以帮我吗?谢谢大家!
祝你好运
答案 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)
有一个窍门,我知道,仅当您不关心保留过去几个月的旧值时,简单的方法才有用。
以下是我的把戏:
以下技巧:
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按键调用之类的方法时,此技巧很有用。