请问如何将mysql多个表的数据组合成一个列表,并可排序和分页,我是用tp框架5.0写的接口

时间:2021-02-07 02:56:05
我这有个页面是某用户所发布的所有信息的列表,是四种类型信息混合在一起的列表,有分页功能,要按发布时间排序,这四种类型的信息数据分别来自于四张不同的表,是用户所发布的四种类型的信息,这四张表字段结构不一样,但都有"发布时间"字段,我个人认为不能分别从四张表中查出该用户发布的所有信息再进行拼接,如果数据多的话会很慢,而且无法实现排序功能,所以我想的是只能在查询的时候就分页查询,但想了好久也不知道如何实现这种查询?请问有没有什么好的办法?

5 个解决方案

#1


试试这个select * from t1 union all select * from t2 union all select * from t3 ……

#2


这个我也尝试过了,主要是这几个表字段数量不一致,union all也不能实现

#3


那可不可能这样
select a.f1,a.f2,a.f3,b.f2,b.f5 from t1 as a,t2 as b;
这样的结果是b字段放到a字段的后面,结果中记录的数量与两个表中记录数量最多的相同,至于查询结果的处理应该可以实现,试试吧。

#4


并列毫无关系的表只能极大的笛卡尔积,显然是不合理的
可以使用联合(union)
union 只要求堆领列的类型相同,并没有要求列名也相同
你只需逐个开列所需字段就可以了

#5


就用union all

select * from (select titleA,addtime from t1 union all select titleB,addtime from t2 union all select titleC,addtime from t3) order by addtime

#1


试试这个select * from t1 union all select * from t2 union all select * from t3 ……

#2


这个我也尝试过了,主要是这几个表字段数量不一致,union all也不能实现

#3


那可不可能这样
select a.f1,a.f2,a.f3,b.f2,b.f5 from t1 as a,t2 as b;
这样的结果是b字段放到a字段的后面,结果中记录的数量与两个表中记录数量最多的相同,至于查询结果的处理应该可以实现,试试吧。

#4


并列毫无关系的表只能极大的笛卡尔积,显然是不合理的
可以使用联合(union)
union 只要求堆领列的类型相同,并没有要求列名也相同
你只需逐个开列所需字段就可以了

#5


就用union all

select * from (select titleA,addtime from t1 union all select titleB,addtime from t2 union all select titleC,addtime from t3) order by addtime