近日工作中有个需求,是将轮播图列表按使用中、未使用、已过期三种状态来顺序显示。
表的结构:
image.png
我的处理办法是:
将使用中、未使用、已过期三种数据分别取出,然后通过union all来合并查询结果。由于形成的最终结果需要按状态排序,就需要对查询的结果插入新字段,以方便处理排序问题。
具体sql如下:
SELECT * from
(
SELECT t.*, 1 as `vol` FROM rotate_banner as t WHERE DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%S') > t.start_time AND DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%S') < t.end_time and state=0
union all
SELECT t.*, 2 as `vol` FROM rotate_banner as t WHERE DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%S') < t.start_time and state=0
union all
SELECT t.*, 3 as `vol` FROM rotate_banner as t WHERE DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%S') > t.end_time and state=0
) as a order by vol limit 30 offset 0;
网友评论