mysql 合并查询结果

近日工作中有个需求,是将轮播图列表按使用中、未使用、已过期三种状态来顺序显示。
表的结构:


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;

你可能感兴趣的:(mysql 合并查询结果)