两张不同的表要组合起来,以时间排序,望各位给个思路
发布于 5 年前 作者 Sxy97 5113 次浏览 来自 问答

一张订单表,一张预约表,现要在订单列表把这两张表的数据都显示出来,以时间排序,要分页,求给个思路啊

来自酷炫的 CNodeMD

21 回复

简单的话就是join,但日后要拆表的话会有坑。有时间的话,写个查两次通过关系键合并成一份数据的功能会好些

来自酷炫的 CNodeMD

订单表 INNER JOIN 预约表 ON 条件 ORDER BY tbl.时间 LIMIT x OFFSET y lz 先熟悉下数据库基本知识再动手

抱歉, 不是union吗? join什么鬼

来自酷炫的 CNodeMD

@zy445566 这两个表没有联系,就是想两张表并成一张表再实现排序分页

@waitingsong 这两个表没有联系,就是想两张表并成一张表再实现排序分页

@wwj559 两表的字段不一项,union不就变成笛卡尔积那种了吗,我想就把这两个表的数据合并一下,他们都有time字段排序输出

@Sxy97 合并规则是什么

@waitingsong 就像两个数组一样取并集,table1:[{a:“xxx”,b:’‘xx"},{a:“xxx”,b:’‘xx"}], table2:[{c:“xxx”,d:“xxx”},{c:“xxx”,d:“xxx”}],合并后[{a:“xxx”,b:’‘xx"},{a:“xxx”,b:’'xx"},{c:“xxx”,d:“xxx”},{c:“xxx”,d:“xxx”}]

select 主键, 排序字段,table='表名1' from t1
union
select 主键, 排序字段,table='表名2' from t2

对这个结果排序,分页,然后区对应的表查询详细数据

@meiwhu 我怎么知道主键是那个表的,自增主建,两个表都有,咋办

@Sxy97 看来你需要的是笛卡尔积

@waitingsong 我不要笛卡尔积,我就想俩表的数据以时间排好

A表

a:1 b:2 date:1
a:3 b:4 date:4

B表

c:5 d:6 date:2
c:7 d:8 date:3

合并成

a:1    b:2    c:null d:null date:1
a:null b:null c:5    d:6    date:2
a:null b:null c:7    d:8    date:3
a:3    b:4    c:null d:null date:4

这样?

@Sxy97 楼主不懂什么是union吧!

额,如果数据库数据量不大的话可以俩表都查出来完了concat数组,order排序,最后给前端返回… 我用的就是这种笨方法… =,=

我可以提供个思路。 用elasticsearch,把数据导入到es里面,从es查询。 有两点好处:

  1. 可以实现你的目标,完全没有关联的两张表,可以合并按照时间返回。
  2. 查询速度会更快

如果可以的话,新建一张索引表,表结构就三个字段,time,type,id,每次增删订单表或预约表时,同时更新一下这张索引表,然后用这张索引表分页排序就好了。 更新索引表可以使用数据库钩子,也可以使用存储过程(这个最好不要用) 历史数据就要写个脚本跑一下了。

@Helovebai 数据量不大,目前我也是这种方法 ,其他的我试试再 分享

@ugrg 我试试

@shadow88sky 没弄过elasticsearch,我学习学习再实践一下

select * from (select id,time,1 as tableName from t1) union select * from (select id,time,2 as tableName from t2) order by time 这样行不

来自酷炫的 CNodeMD

回到顶部