如何创建一个触发器,在30天后将值重置为零?

时间:2015-09-02 06:09:25

标签: mysql codeigniter

我有一张桌子'用户'。在该表中,有一个字段余额,其数据类型为 ENUM('是',' No')。现在我想创建一个触发器,当天平设置为"是" 时触发。另外,我想在30天后将Balance的值重置为 NO

我正在使用 PHP Codeigniter 。我有一个拥有自己用户的经销商表。所以每个经销商都有一些用户。

  

因此,当经销商将用户余额设置为是时,触发器应该是   被解雇,30天后应将用户余额设置为NO

每个用户的余额也应该唯一重置。我的意思是今天使用的余额设置为是,明天将用户二余额设置为是。那么如何触发知道何时为每个特定用户开火?

2 个答案:

答案 0 :(得分:2)

我的解决方案是

  • 维护updatedon
  • 等列
  • balance为30天而updatedonbalance时(根据您的评论),编写存储过程以将YES设置为NO
  • 每天运行一个作业以调用存储过程(它将仅设置30天更新记录)

答案 1 :(得分:2)

为了跟踪日期,您需要在哪个用户updated_to_yes_date上保留一列。当用户将枚举列更新为“是”时,您应将当前日期设置为updated_to_yes_date

现在让我们为控制器编写cron作业代码。

class Cronjob extends CI_Controller {

  function index() {
    // Get Date before 30 days.
    $today = new DateTime();
    $dateBefore30days = $today->modify('-30 days');

    $this->db->update('users',array('enumcolumn'=>'No'), array('enumcolumn'=>'Yes', 'updated_to_yes_date'=>date_format($dateBefore30days , 'Y-m-d'));
  }
}

我没有测试过上面的控制器,但它会帮助你。

现在是时候设置cron作业了。你需要每天运行这个cron作业。要了解如何在cPanel CLICK HERE

上设置cron作业

现在我们需要从命令行执行controller方法。为此,请转到codeignitor Running via the CLI文档。

在我们的案例中,它将像

$ php index.php cronjob index

在许多情况下,我们需要提供index.php的完整路径,如

$ php /path/to/webroot/index.php cronjob index