V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kikione
V2EX  ›  程序员

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

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

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

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

    如果没有,数据量大,性能要求高,上 es (但是这样会有延迟问题,是否可接受)
    iColdCat
        14
    iColdCat  
       145 天前   ❤️ 2
    @lower 前端:我谢谢你
    pengtdyd
        15
    pengtdyd  
       145 天前
    一个好的架构师真的挺重要的
    jtwor
        16
    jtwor  
       145 天前
    同问,如果是按日期分表_yyyyMMdd ,大厂都是怎样分组合计做报表的
    ankle306
        17
    ankle306  
       145 天前
    查询如果是根据创建时间 /更新时间倒序,可以第一次查 a 表 10 条数据,b 表 10 条数据聚合,下一页让前段把最后一条数据的创建时间传到后段,查询 a 表在这个时间前的 10 条数据,b 表在这个时间前的 10 条数据,再聚合,依次类推。
    llzzll1234
        18
    llzzll1234  
       145 天前
    说用视图的,那跨库甚至跨实例你们要怎么搞?
    DinnyXu
        19
    DinnyXu  
       145 天前
    很简单。假设你 2 张表都在同一个数据库,那么可以使用 MySQL 函数 UNION ALL 进行聚合然后分页。
    如果你 2 张表在不同的数据库,那么现在根据条件查出 A 库 A 表放入一个指定集合,再把 B 库 B 表根据条件查询出来放入指定集合。A 表和 B 表的集合必须是同一个泛型,然后再根据这个汇总的集合进行内存分页即可
    dengshen
        20
    dengshen  
       145 天前 via iPhone
    @lower 把整个数据库返给我吧。我自己来
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1051 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 91ms · UTC 20:10 · PVG 04:10 · LAX 13:10 · JFK 16:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.