两个不同的表,分别查询,然后聚合,如何做分页 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
kikione
V2EX    程序员

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

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

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

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

    如果没有,数据量大,性能要求高,上 es (但是这样会有延迟问题,是否可接受)
    iColdCat
        14
    iColdCat  
       2021-12-31 16:37:07 +08:00   2
    @lower 前端:我谢谢你
    pengtdyd
        15
    pengtdyd  
       2021-12-31 16:37:08 +08:00
    一个好的架构师真的挺重要的
    jtwor
        16
    jtwor  
       2021-12-31 17:00:58 +08:00
    同问,如果是按日期分表_yyyyMMdd ,大厂都是怎样分组合计做报表的
    ankle306
        17
    ankle306  
       2021-12-31 19:07:28 +08:00
    查询如果是根据创建时间 /更新时间倒序,可以第一次查 a 表 10 条数据,b 表 10 条数据聚合,下一页让前段把最后一条数据的创建时间传到后段,查询 a 表在这个时间前的 10 条数据,b 表在这个时间前的 10 条数据,再聚合,依次类推。
    llzzll1234
        18
    llzzll1234  
       2021-12-31 22:58:43 +08:00
    说用视图的,那跨库甚至跨实例你们要怎么搞?
    DinnyXu
        19
    DinnyXu  
       2021-12-31 23:05:18 +08:00
    很简单。假设你 2 张表都在同一个数据库,那么可以使用 MySQL 函数 UNION ALL 进行聚合然后分页。
    如果你 2 张表在不同的数据库,那么现在根据条件查出 A 库 A 表放入一个指定集合,再把 B 库 B 表根据条件查询出来放入指定集合。A 表和 B 表的集合必须是同一个泛型,然后再根据这个汇总的集合进行内存分页即可
    dengshen
        20
    dengshen  
       2021-12-31 23:45:26 +08:00 via iPhone
    @lower 把整个数据库返给我吧。我自己来
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2733 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 14:8 PVG 22:08 LAX 07:08 JFK 10:08
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86