根据同一记录中的某些其他值更新记录值

时间:2017-05-29 15:45:44

标签: mysql mariadb

我的数据库中有以下表格:

 CREATE TABLE `plans` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `user_id` int(11) DEFAULT NULL,
      `plan` varchar(64) DEFAULT NULL,
      `subscr_id` varchar(64) DEFAULT NULL,
      `last_payment` timestamp NULL DEFAULT NULL,
      `active` tinyint(1) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULT CHARSET=latin1

计划值为1 MONTH3 MONTHSYEAR,相当于1个月,3个月和12个月。

记录示例:

id----user_id-----plan--------subcr_id-------last_payment--------active

30 |    15     |    1 MONTH  |  A-1   |   2017-05-19 08:22:29   |1

如果active发生在一个月之前(如果该记录的计划是last_payment),超过3个月之前,我想查看每条记录并将1M更新为0 (如果该记录的计划是3个月)且超过12个月(如果该记录的计划是YEAR)。

虽然我对简单的更新语句感到满意,但是如果逻辑我不知道如何执行,那么这需要一些。你能救我一下吗?

2 个答案:

答案 0 :(得分:1)

我认为你应该尝试这样的事情:

 *Error in file(file, "rt") : cannot open the connection In addition: Warning message: In file(file, "rt") : cannot open file

只需将计划字段更改为整数字段或间隔(日期),应该比制作案例场景更容易,但您也可以这样做:

UPDATE plans t, (SELECT *  FROM plans) t1
   SET t.active = 0 WHERE date(now()) not between date_add(t1.last_payment,interval t1.plan month)

类似的东西,希望它可以帮助你

答案 1 :(得分:1)

update plans set active = case
when plan = '1 MONTH' and last_payment < now() - interval 1 month then 0
when plan = '3 MONTH' and last_payment < now() - interval 3 month then 0
when plan = 'YEAR' and last_payment < now() - interval 1 year then 0
else 1
end;