如何创建一个 cron 作业以在 30 天后重置数据库中的值?

how to create a cron job that resets the values in database after 30 days?

我正在使用 PHP Codeigniter

我有表 users,其字段余额日期类型为 ENUM('Yes','No')。我还有一个名为 reset_date 的字段,它存储用户余额设置为是的日期。所以我想数 30 天,30 天后想再次将该用户余额重置为 No。因此,对于每个用户,如果他的余额用户设置为是,那么我想计算 30 天并在 30 天后重置余额。

我正在存储余额设置为是的当前日期:

if($this->input->post('balance') === "Yes") 
        {

                $key= $this->session->userdata('key');
                $this->reseller_m->deduct($key);/// pass youe id here

                $this->load->helper('date');
                $this->db->set('reset_date',unix_to_human(now()));   
                $this->db->where('id',$id);
                $this->db->update('users', $data);

        }

备选方案:

您可以在没有 cron 作业的情况下执行此操作:只需使用名为 balance_timestamp 的列,这是字段设置为 yes 时的时间戳。如果没有设置(null),则表示没有。

现在,而不是 SELECT .. WHERE balance="Yes",只需调用 SELECT .. WHERE balance_timestamp>NOW()-30,其中 returns 在过去 30 天内设置为是的所有项目

或者,您可以调用您的字段 balance_validuntil 并将其设置为 NOW()+30。这使得select更容易:SELECT .. WHERE balance_validuntil>=NOW()

这是代码用于编写

if($this->input->post('balance') === "Yes") 
        {

                $key= $this->session->userdata('key');
                $this->reseller_m->deduct($key);/// pass youe id here

                $this->load->helper('date');
                $this->db->set('balance_validuntil',unix_to_human(now()+30));   
                $this->db->where('id',$id);
                $this->db->update('users', $data);
        }
}

对于selecting:

$this->db->select('*');
$this->db->where('balance_validuntil >=', unix_to_human(now()));