mysql UNION UNION All

我想实现的是关于帖子取的数据:

1、首先是置顶的帖子,然后是用户所在地的帖子,再次是非置顶非用户所在地的帖子

因为用到分页的缘故,所以我选择用union 方法:

起初:

(select * from temp1 where ft.is_top=1 )
UNION
(select * from temp1 as f where   f.city=45 and f.is_top<>1 and f.status=1 and f.type_id=1 )
UNION
(select * from temp1 where  f.is_top=0 and f.status=1 and f.type_id=1)
 limit 20

每个子查询也可以是联表查询,

因为我这里是置顶的帖子有排序的要求所以写到子语句中了,如果要写到最后面 应该给 create_time 命个别名,在最后写是对整个查询结果进行排序,但是这样还是不能达到所要的效果

然后:

select *  from(select * from temp1 where ft.is_top=1 order by create_time desc )
UNION
select * from (select * from temp1 as f where   f.city=45 and f.is_top<>1 and f.status=1 and f.type_id=1 order by create_time desc )
UNION
select *  from(select * from temp1 where  f.is_top=0 and f.status=1 and f.type_id=1 order by create_time desc )
 limit 20

这样在navicat 软件中可以执行并调出所要的数据,但是用方法执行的时候报错,所用的参数都写了

最后:吐舌头

(select 100 as index_f,create_time as fcreate from temp1 where ft.is_top=1 )
UNION
 (select 50 as index_f ,create_time as fcreate from temp1 as f where   f.city=45 and f.is_top<>1 and f.status=1 and f.type_id=1 )
UNION
(select 10 as index_f,create_time as fcreate from temp1 where  f.is_top=0 and f.status=1 and f.type_id=1 )
o
r
der by index_f desc,fcreate desc limit 20

这样就可以了 。

注:这样的查询速度比较慢,如果上线用户多的话估计会更慢,但是目前只能想到这个方法,(分页是用公司自己封装的,如果改的话需要大改,)如果大家有什么更好的方法,请多多指教~~~

不建议用这种查询,如果可以的话自己封装个分页,将所需数据合并数组,拆分数组进行分页

初学者,做个记录~~~~呼呼~~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值