如何创建一个 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()));
我正在使用 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()));