【问题标题】:How to update the status automatically after 15 days?如何在 15 天后自动更新状态?
【发布时间】:2018-03-22 05:29:11
【问题描述】:

我在 MySQL 表中有一个日期和状态列。帖子的当前状态是 = 已发送/已接收。我只想更改状态 = 15 天后自动中止。

查询:

 if (txtrecdate.Text == "" && ddlstatus.SelectedItem.Text != "Completed")
     {
         queryStr = "update barter_proposals set website_a=?web_a,email_id=?email,email_id2=?email2,email_id3=?email3,contact_name=?cname,proposal_status=?status,reason=?rsn," +
              "comment1=?com1 ,agreement=?agreement,agrmt_filename=?agrmt_filename,comment2=?com2,comment3=?com3,lifespan_date=?lpdate where pro_id=?pro_id";
     }

我搜索了一下,找到了这个解决方案:

UPDATE table SET status = "Aborted" where date=DATE_ADD(date, INTERVAL 15 DAY) 

如何在我的更新查询中应用它?有没有其他方法可以在 15 天后自动更改状态?

【问题讨论】:

  • 编写一个 sql 作业并每天运行它。检查距 sysdate 15 天前的日期,对于此类数据,将状态更新为 Aborted。如果您不希望在 sql 中执行此操作,请在 Windows 服务或 azure Web 作业或任务计划程序中执行此操作。你也可以看看 Hangfire
  • 好吧,如果您想在 "C#" 级别执行此操作,您有多种选择,即创建将在时间到来时执行您的代码的服务或使用 Windows 任务计划程序.
  • 或者您也可以创建一个功能,如果用户登录/访问系统,该功能将检查日期。如果日期超过 15 天,则更新状态,如果不是,则不执行任何操作。

标签: c# mysql


【解决方案1】:

查看 MySQL 事件。首先你需要在 MySQL 端开启事件调度器

https://dev.mysql.com/doc/refman/5.7/en/events-configuration.html

然后创建事件

delimiter $$

CREATE EVENT update_table_statuses
    ON SCHEDULE
      EVERY 1 DAY STARTS '2018-03-22 23:00:00'
    DO
      BEGIN
        UPDATE table SET status = "Aborted" where date=DATE_ADD(date, INTERVAL 15 DAY);
      END $$

delimiter ;

事件每天执行一次

【讨论】:

  • 我不明白条件在哪里。它会做什么? date=DATE_ADD(日期,间隔 15 天)
  • 嘿,事件内部的查询是从您的问题中复制的。也许你的意思是date = date_sub(now(), interval 15 day),但谁知道呢
  • yup @alexey ...实际上我正在实时服务器上进行更改...所以我只想确认该条件是否会在 15 天后更新状态..
  • 您的原件不会做任何事情,因为它总是错误的,上面的那个应该可以解决问题。我也会用<=替换=
猜你喜欢
  • 2018-09-06
  • 2013-01-16
  • 1970-01-01
  • 2017-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多