我想实现的是关于帖子取的数据:
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 )
order by index_f desc,fcreate desc limit 20
这样就可以了 。
注:这样的查询速度比较慢,如果上线用户多的话估计会更慢,但是目前只能想到这个方法,(分页是用公司自己封装的,如果改的话需要大改,)如果大家有什么更好的方法,请多多指教~~~
不建议用这种查询,如果可以的话自己封装个分页,将所需数据合并数组,拆分数组进行分页
初学者,做个记录~~~~呼呼~~~~