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