無限級樹形結構,sql帶條件帶分頁查詢


先展示效果:

 

 

 

 

數據庫表結構:單表、無限級樹,根據pid查找父節點,pid為零則為頂級節點。

 

 

 

 

 需求:根據dict_name模糊查詢並分頁,分頁分的是一級節點。

思路:先查詢滿足條件的節點的所有頂級節點,並將頂級節點去重分頁,在遍歷頂級節點遞歸把每棵樹查詢出來。

 

1、數據庫建函數用來查詢滿足條件的頂級節點:getLevelOneId  參數rootId (int(5))

BEGIN
 DECLARE i VARCHAR(100) DEFAULT '';
 DECLARE j VARCHAR(1000) DEFAULT  rootId;

WHILE rootId !=0 DO 
   SET i = (SELECT pid FROM sys_dict WHERE id = rootId);
    IF i !=0  THEN
      set j = i;
      set rootId = i;
        ELSE 
            set rootId = i;
        END IF;  
END WHILE;
return j;
END

2、sql查詢去重並分頁滿足條件的頂級節點

SELECT DISTINCT getLevelOneId(id) from sys_dict WHERE `dict_name` LIKE '%123%' limit 1,10

3、遍歷頂級id的列表遞歸畫出每個樹(mybatis寫法,也可以在java里面遞歸查詢)

@Select("select * from sys_dict where pid = #{id} and status <> -1")
    @Results({
            @Result(property="id",column="id"),
            @Result(property="dictCode",column="dict_code"),
            @Result(property="dictName",column="dict_name"),
            @Result(property="parentId",column="pid"),
            @Result(property="createdTime",column="created_time"),
            @Result(property="updatedTime",column="updated_time"),
            @Result(property="children", column="id", javaType=List.class,
                    many=@Many(select="com.towery.mapper.EtrDictMapper.selectTreeById", fetchType= FetchType.EAGER))
    })
    List<TreeNode> selectTreeById(Integer id);

    @Select("select * from sys_dict where status <> -1 and id = #{id}")
    @Results({
            @Result(property="dictCode",column="dict_code"),
            @Result(property="dictName",column="dict_name"),
            @Result(property="createdTime",column="created_time"),
            @Result(property="updatedTime",column="updated_time")
    })
    TreeNode selectById(Integer id);

TreeNode字段

private Integer id;
private Integer parentId; private List<TreeNode> children = new ArrayList<>(); private String dictName; private String dictCode; private Integer type; private String description; private Integer leaf; private Integer sortby;
getter\setter省略

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM