SELECT * FROM (select id,gdname,restricted_purchase,original_price,price,pic,text,seckill,seckill_start,seckill_end,roof_placement,number from yh_goods
where
seckill_start<= '1586241657'
and seckill_end >= '1586241657'
and `del` = 0
AND `status` = 1
AND `seckill` = 1
AND `roof_placement` = 1
order by roof_placement asc,update_time desc limit 9999999999) as a
union
(select id,gdname,restricted_purchase,original_price,price,pic,text,seckill,seckill_start,seckill_end,roof_placement,number from yh_goods
where
seckill_start<= '1586241657'
and seckill_end >= '1586241657'
and `del` = 0
AND `status` = 1
AND `seckill` = 1
AND `roof_placement` != 1
order by seckill_end asc,create_time desc limit 9999999999) as b
union
(select id,gdname,restricted_purchase,original_price,price,pic,text,seckill,seckill_start,seckill_end,roof_placement,number from yh_goods
where
`del` = 0
AND `status` = 1
AND `seckill` = 1
order by seckill_end desc,create_time desc limit 9999999999
) limit 0,20
image.gif
1、在使用union的子查询的时候只能给第一个取别名 其他的取别名会报语法错误
2、在子查询排序的时候 如果不写limit的话会过滤掉排序 因为写上limit 9999999方可解决