每月重置 MySql 列值
Reseting MySql column value each month
我想知道是否有任何方法可以每个月在 MySql 中重置一个值。比如说我有一个积分列,它在四月的值为 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 ...;
//
我的 SQL 命令行,用于更新 dbName 数据库中 tableName table 中的 fieldName 字段;
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;
}
最后更新你的数据库
$update = mysqli_query($db, "UPDATE ".$value_table." SET value='".$value."'");
在更新你的数据库 table 时使用这个硬技巧在同一个月用你的最后一个值更新一个新值然后保留最后一个值 + 新值,
但是,例如,如果您的最后一个值是 2 月 29 日,而现在新值是 3 月 1 日,则 db 重置上的值 + 新值,即(0 + 新值)。
如果你想在没有 cronjob 的情况下更新像 API 键调用这样的东西,这个技巧很有用,只是当你的值是更新你的数据库并且对每个月的统计数据不重要时。
我想知道是否有任何方法可以每个月在 MySql 中重置一个值。比如说我有一个积分列,它在四月的值为 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 ...;
//
我的 SQL 命令行,用于更新 dbName 数据库中 tableName table 中的 fieldName 字段;
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;
}
最后更新你的数据库
$update = mysqli_query($db, "UPDATE ".$value_table." SET value='".$value."'");
在更新你的数据库 table 时使用这个硬技巧在同一个月用你的最后一个值更新一个新值然后保留最后一个值 + 新值, 但是,例如,如果您的最后一个值是 2 月 29 日,而现在新值是 3 月 1 日,则 db 重置上的值 + 新值,即(0 + 新值)。
如果你想在没有 cronjob 的情况下更新像 API 键调用这样的东西,这个技巧很有用,只是当你的值是更新你的数据库并且对每个月的统计数据不重要时。