美文网首页
两个查询sql组装分页

两个查询sql组装分页

作者: ikain | 来源:发表于2019-02-19 10:25 被阅读0次

之前百度搜索相关用法没有找到,自己写出来分享记录下
两个查询sql组装分页,如下是java+mysql示例,场景是两个无法union的sql的需要联合分页

    public static void main(String[] args) {
        // 入参
        int page = 1; // 1-n 第几页
        int pageSize = 10; // 1-n 总行数
        // 分页逻辑
        int countTotal = 0;
        // 总集合
        List<Object> itemsAll = new ArrayList<>();
        // sql 1 count
        int pageOneCount = countSql();
        if (pageOneCount > 0) {
            // sql 1 list
            List<Object> pageOne = findPageOne(page, pageSize);
            itemsAll.addAll(pageOne);
            countTotal = pageOneCount;
        }
        int itemsSize = itemsAll.size();
        // sql 2 count
        int pageTwoCount = countSql();
        if (itemsSize != pageSize) {
            int pageY = 0;
            if (itemsSize == 0) {
                // 计算sql2的 beginIndex - n
                pageY = countTotal % pageSize;
            }
            // 计算sql2的 page
            page = page - (countTotal / pageSize);
            // 计算sql2的 pageSize
            pageSize = pageSize - itemsSize;
            // sql 2 list
            List<Object> pageTwo = findPageTwo(page, pageSize, pageY);
            itemsAll.addAll(pageTwo);

        }
        countTotal += pageTwoCount;

        Page<Object> objectPage = new Page<>(itemsAll, countTotal);

    }

    static List<Object> findPageOne(int page, int pageSize) {
        // sql 1
        String sql1 = "select * from table limit ?,?";
        List<Object> list = limitSql(page, pageSize, 0, sql1);
        return list;
    }

    static List<Object> findPageTwo(int page, int pageSize, int pageY) {
        // sql 2
        String sql2 = "select * from table limit ?,?";
        List<Object> list = limitSql(page, pageSize, pageY, sql2);
        return list;
    }

    static List<Object> limitSql(int page, int pageSize, int pageY, String sql) {
        int beginIndex = ((page - 1) * pageSize) - pageY;
        int length = pageSize;
        // return select * from table limit beginIndex,length
        return new ArrayList<>();
    }

    static int countSql() {
        // return select count(1) from table
        return 0;
    }

    static class Page<T> {
        int count;
        List<T> items;
        Page(List<T> items, int count){
            this.count = count;
            this.items = items;
        }
    }

相关文章

网友评论

      本文标题:两个查询sql组装分页

      本文链接:https://www.haomeiwen.com/subject/fzhzeqtx.html