一张订单表,一张预约表,现要在订单列表把这两张表的数据都显示出来,以时间排序,要分页,求给个思路啊
来自酷炫的 CNodeMD
简单的话就是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查询。 有两点好处:
- 可以实现你的目标,完全没有关联的两张表,可以合并按照时间返回。
- 查询速度会更快
如果可以的话,新建一张索引表,表结构就三个字段,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