一、项目描述
今天遇到一个需求,有四个时间,分别是报名开始时间(apply_start_time)、报名结束时间(apply_end_time)、活动开始时间(activity_start_time)、活动结束时间(activity_end_time)。活动状态会根据时间的不同显示的也不同。这就需要对数据库进行实时的监控,来判断现在的时间和这四个时间的关系,然后修改活动状态。
二、解决方案
当然,解决方案有很多,我记得当时我们在做合作的时候用的是Timer,当时项目卡的不行不行的,所以这次我不打算在后端写了,那么我就在数据库中操作吧。实现思路,也就是写一个存储过程,然后通过Mysql的定时器去执行存储过程
三、方案实施
(1)创建存储过程
点击数据库,然后点击函数,再点击存储过程
然后就可以在存储过程中写相应的SQL语句了。
CREATE DEFINER=`root`@`localhost` PROCEDURE `NewProc`()
BEGIN
#Routine body goes here...
UPDATE `ceres_promotion` c set c.`status`=
CASE WHEN NOW()<apply_start_time THEN 1
WHEN apply_start_time<NOW() AND NOW()<apply_end_time THEN 2
WHEN apply_end_time<NOW()AND NOW()<activity_start_time THEN 3
WHEN activity_start_time <NOW()AND NOW()< activity_end_time THEN 4
WHEN NOW()>activity_end_time THEN 5
END;
END
(2)创建定时器
打开数据库点击事件
扫描二维码关注公众号,回复:
12653492 查看本文章

调用存储过程
点击计划,设置间隔时间
然后点击保存就可以了。