数据库多表拼接分页数据
需求背景
需要做类似网盘查看某个文件夹,文件夹中有子文件夹和子文件,分别存储在不同的数据库表中。排序需求是优先文件夹,文件夹数据不够,再补充文件数据。
这样的话,如果文件夹数据不够,需要计算出查询文件的起始位置
代码实现
/**
* 计算文件分页起始位置
*
* @param pageNum 页数
* @param pageSize 页大小
* @param folderSize 当前分页文件夹查询到的数量
* @param folderCount 总文件夹数量
* @return 文件分页起始位置
*/
public static Integer getPageStart(Integer pageNum, Integer pageSize, Integer folderSize, Integer folderCount) {
int remain = pageSize - folderSize;
int start = 0;
boolean unenough = remain % pageSize == 0;
if (unenough) {
//当前页没有文件夹数据
if (pageNum == 1) {
//第一页且没有文件夹
start = 0;
} else {
boolean b = ((pageNum - 1) * pageSize) <= folderCount;
if (b) {
//上一页为纯文件夹
start = 0;
} else {
//上一页为文件夹+文件
//上一页文件数量
int fs = pageSize - (folderCount % pageSize);
start = fs + ((pageNum - 2) * pageSize);
}
}
} else {
//当前页有文件夹数据
start = 0;
}
return start;
}
touch fish

浙公网安备 33010602011771号