数据库多表拼接分页数据

需求背景

需要做类似网盘查看某个文件夹,文件夹中有子文件夹和子文件,分别存储在不同的数据库表中。排序需求是优先文件夹,文件夹数据不够,再补充文件数据。
这样的话,如果文件夹数据不够,需要计算出查询文件的起始位置

代码实现

    /**
     * 计算文件分页起始位置
     *
     * @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;
    }
posted @ 2022-06-07 18:43  meow_world  阅读(192)  评论(0)    收藏  举报