CNode

两张不同的表要组合起来,以时间排序,望各位给个思路

问答
SSxy97发布于8 年前最后回复8 年前21 回复7025 浏览0 收藏

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

来自酷炫的 CNodeMD

查看回复

回复 (21)

Z
zy445566#1·8 年前

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

来自酷炫的 CNodeMD

W
waitingsong#2·8 年前

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

W
wwj559#3·8 年前

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

来自酷炫的 CNodeMD

S
Sxy97#5·8 年前
引用 waitingsong订单表 INNER JOIN 预约表 ON 条件 ORDER BY tbl.时间 LIMIT x OFFSET y lz 先熟悉下数据库基本知识再动手

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

S
Sxy97#6·8 年前
引用 wwj559抱歉, 不是union吗? join什么鬼 来自酷炫的 CNodeMD

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

S
Sxy97#8·8 年前
引用 waitingsong@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"}]

M
meiwhu#9·8 年前
select 主键, 排序字段,table='表名1' from t1
union
select 主键, 排序字段,table='表名2' from t2

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

S
Sxy97#10·8 年前
引用 meiwhu对这个结果排序,分页,然后区对应的表查询详细数据

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

S
Sxy97#12·8 年前
引用 waitingsong@Sxy97 看来你需要的是笛卡尔积

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

D
dislido#13·8 年前

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

这样?

H
Helovebai#15·8 年前

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

S
shadow88sky#16·8 年前

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

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

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

F
FantasyGao#21·8 年前

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

参与回复
登录后即可参与回复。登录