公司最近有个需求,对线上产品推广悬赏进行预告。
实际应用场景:
如一家入驻我公司网站的A商家,最近该商家想推广其产品,通过悬赏的方式来招募推广其产品的用户。而用户以报名的形式来参加。
当商家发布悬赏需求时,把数据插入到表中。悬赏不会立刻允许用户来报名,而是根据A商家自己定义时间来允许用户对其报名。这里就需要在设计表时,需要有需求状态字段。
当悬赏时间开始时,状态改变,就可以允许用户来报名了。
其实这业务需求有点类似各大电商平台的秒杀。如京东秒杀,时间一到就开始进行秒杀。
本公司平台的悬赏预告显示规则,和秒杀还是有点出入。以京东秒杀为例,京东显示秒杀预告如以下显示
而我司app显示如下
在红框内 显示的是以今天为起始时间作为第一天,第四天到第七天的预告。红框下,是最近3天内(今天,明天,后天)的预告(包含当天已结束的预告)。
所以这些数据该如何查呢?以哪个个字段为条件呢?
我想到了用商家自己设定的预告时间为条件。但是该时间不仅包含年月日,还有小时和分。为去掉小时和分。对商家预告时间进行处理。用到了mysql 自带的函数DATE_FORMAT(),格式:DATE_FORMAT( 时间字端名,‘%Y%m%d’) 。 获取当天日期CURDATE()。
那么 未来第四天到第七天的预告条件就可以写成(注:字段格式datetime)
where DATE_FORMAT( 时间字段名,‘%Y%m%d’) BETWEEN date_add(CURDATE(), INTERVAL 3DAY) and date_add(CURDATE(), INTERVAL 6DAY) order by time asc limit 5;
今天 明天 后天的预告条件就可以写成
where DATE_FORMAT( 时间字段名,‘%Y%m%d’) BETWEEN CURDATE() and date_add(CURDATE(), INTERVAL 2 DAY) order by time asc limit 5;