两个不同的表,分别查询,然后聚合,如何做分页

2021-12-31 13:39:55 +08:00
 kikione
3284 次点击
所在节点    程序员
20 条回复
yungeo
2021-12-31 13:55:13 +08:00
数据放到 ES 里做成 1 张大宽表试试?
xuelu520
2021-12-31 13:58:28 +08:00
2 个表,做一个视图?
wolfie
2021-12-31 13:59:51 +08:00
内存分页。
1 ~ 10 ,分别查 1 ~ 10 。
10 ~ 20 ,分别查 1 ~ 20 。
20 ~ 30 ,分别查 1 ~ 30
Habyss
2021-12-31 14:00:21 +08:00
不引入其他, 并且数据量适中, 单纯解决的话
1.两张表各查出前 n 条, 然后代码分页出[n-size, n]
2.数据库 union all, 也是两张表的前 n 条 union all
wd
2021-12-31 14:00:33 +08:00
你这显然哪里做的聚合只能在哪里分页,你要在数据库聚合就简单了
lower
2021-12-31 14:02:41 +08:00
实在不行全扔给前端,让前端自己去分页……
VersionGod1
2021-12-31 14:14:39 +08:00
我遇到过这种问题,是用数据库的视图解决的,你可以试试
66beta
2021-12-31 14:30:54 +08:00
十几年前都是用视图,现在是不是流行存 redis ?
hay313955795
2021-12-31 15:11:48 +08:00
直接做视图不行?? 两个表。谁是谁的补充呢? 分页是分哪个表的数据呢?
你这里都没有说啊
lauix
2021-12-31 15:15:06 +08:00
都取出来,用代码在内存里进行汇总分查询
shyrock
2021-12-31 15:50:13 +08:00
@lower #6 都到前端了,还存在分页问题?
hj24
2021-12-31 16:23:56 +08:00
es 宽表,或者原数据库做一张聚合表是正解
mikicomo
2021-12-31 16:35:00 +08:00
两张表是否有主次之分?

如果有,并且分页查询条件是否都是取得主表的字段,那么先查完主表再关联查从表就好了。

如果没有,数据量小,无性能要求,视图

如果没有,数据量大,性能要求高,上 es (但是这样会有延迟问题,是否可接受)
iColdCat
2021-12-31 16:37:07 +08:00
@lower 前端:我谢谢你
pengtdyd
2021-12-31 16:37:08 +08:00
一个好的架构师真的挺重要的
jtwor
2021-12-31 17:00:58 +08:00
同问,如果是按日期分表_yyyyMMdd ,大厂都是怎样分组合计做报表的
ankle306
2021-12-31 19:07:28 +08:00
查询如果是根据创建时间 /更新时间倒序,可以第一次查 a 表 10 条数据,b 表 10 条数据聚合,下一页让前段把最后一条数据的创建时间传到后段,查询 a 表在这个时间前的 10 条数据,b 表在这个时间前的 10 条数据,再聚合,依次类推。
llzzll1234
2021-12-31 22:58:43 +08:00
说用视图的,那跨库甚至跨实例你们要怎么搞?
DinnyXu
2021-12-31 23:05:18 +08:00
很简单。假设你 2 张表都在同一个数据库,那么可以使用 MySQL 函数 UNION ALL 进行聚合然后分页。
如果你 2 张表在不同的数据库,那么现在根据条件查出 A 库 A 表放入一个指定集合,再把 B 库 B 表根据条件查询出来放入指定集合。A 表和 B 表的集合必须是同一个泛型,然后再根据这个汇总的集合进行内存分页即可
dengshen
2021-12-31 23:45:26 +08:00
@lower 把整个数据库返给我吧。我自己来

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/825492

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX