比方说我一个业务涉及多张表,记录出来要分页,如果同一张表用limit,多张表要怎么做呢?
需要一張臨時表,記錄每張表的表名和id,對接多表。這樣可以實現分頁.
可以先把两张表的联合查询做成一个视图,取数据从视图取就可以像一个表那样操作了
UNION合并结果,然后走正常的LIMIT OFFSET即可。
可以用视图的概念,创建一个虚拟的表。
如:
id 40 80 120 ... tab1 tab2 tab3 ... pagesize=15; page = 5 table_index = ceil((pagesize*page)/40); //定位表:tab2 if(pagesize*page+pagesize > table_index*40){ //跨tab2 与 tab3 ,下来获得tab3的数据 table_next_index = table_index + 1 numbers = pagesize*page+pagesize - table_index*40; //既要从tab3中取numbers条数据 }else{ //直接从tab2中取数据,完成分页 }
上面是伪代码,主要用来说明思路。可以将这种分页方法封装起来,传入参数page、pagesize、分表size,变为通用的分表后分页类。不过对于各个分表汇总的总数,还是得通过每张表计算。还可以维护一个表,专门用来记录总数,也可以
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
暂无简介
文章 0 评论 0
接受
发布评论
评论(5)
需要一張臨時表,記錄每張表的表名和id,對接多表。這樣可以實現分頁.
可以先把两张表的联合查询做成一个视图,取数据从视图取就可以像一个表那样操作了
UNION合并结果,然后走正常的LIMIT OFFSET即可。
可以用视图的概念,创建一个虚拟的表。
如:
上面是伪代码,主要用来说明思路。
可以将这种分页方法封装起来,传入参数page、pagesize、分表size,变为通用的分表后分页类。
不过对于各个分表汇总的总数,还是得通过每张表计算。还可以维护一个表,专门用来记录总数,也可以