业务上会出现这样一种场景,A和B两张表,先从A表查,A表查完,再从B表查询。
acount和bCount分别代表:两表的数据总数,
pageNo和pageSize分别代表:当前查询第几页和每页条数
needSize和diff分别代表:needSize=pageNo*pageSize,diff=needSize-aCount
if (diff <= 0) {//全从A表取
offset = (pageNo-1)*pageSize;
select * from A offset {offset} limit {pageSize}
}
else {//部分A表部分B表,或全部B表
diff % pageSize
(1)能整除,全从B表取
(2)不能整除,
<2.1> diff < pageSize,部分从A表取,部分从B表取
<2.2> diff >= pageSize,全从B表取
if (diff % pageSize ==0) {//能整除,全从B表取
offset = ((int)(diff/pageSize)-1)*pageSize;
select * from B offset {offset} limit {pageSize}
} else {//不能整除
if (diff < pageSize) {//部分从A表取,部分从B表取
aOffset = (pageNo-1)*pageSize;
select * from A offset {aOffset} limit {pageSize}
select * from B offset 0 limit {diff}
} else {//全从B表取
offset = ((int)(diff/pageSize)-1)*pageSize + (diff%pageSize);
select * from B offset {offset} limit {pageSize}
}
}
}