Java-递归查询法

递归查询用户所在团队的老大的用户id(一个团队中,只有一个老大,也就是父级id="-1")

一、递归查询递归查询用户所在团队的老大的用户id

如下:是表结构

image

first_agent_id----用户的上级id
user_id----用户的id

我要查询用户user666所在团队的老大的用户id

代码如下:

业务代码:

点击查看代码
@Override
    public TgOrderVO tgOrderList(Map<String, Object> params) {
        String userId=params.get("userId").toString();
        //根据用户id查询该用户所在团队的老大的用户id
        String firstAgentId="";
        String pid="";
		//查询用户的上级id
        firstAgentId=fxConsumerDiscountRuleDao.getFirstAgentId(userId);
        if (firstAgentId.equals("-1")){
            //   添加业务代码     MyTeamVO vo = fxConsumerDiscountRuleService.getMyTeam(userId);
        }else {
			//调用递归查询老大的用户id
            pid = getPid(firstAgentId);
            log.info("团队老大的用户id为"+pid);
			//添加业务代码
        }
        return tgOrderVO;
    }

递归方法代码:

点击查看代码
/**
     * 递归查询用户所在团队的老大的用户id
     * @param userId
     * @return
     */
    public  String getPid(String userId){
        String firstAgentId="";
        String resultId="";
		//查询用户的上级id
        firstAgentId=fxConsumerDiscountRuleDao.getFirstAgentId(userId);
        if (firstAgentId.equals("-1")){
            resultId=userId;
            return resultId;
        }else {
            resultId=firstAgentId;
            String pid = getPid(resultId);
            return pid;
        }
    }

二、使用mysql语法递归查询文章所属目录的所有父级目录(包括本身)

1.目录表 表结构如下:

image

2.mysql语句:

点击查看代码
SELECT T2.name className
        FROM (
        SELECT
        @r AS _id,
        (SELECT @r := parent_id FROM sys_class WHERE id = _id) AS parent_id,
        @l := @l + 1 AS lvl
        FROM
        (SELECT @r := #{classId}, @l := 0) vars,
        sys_class h
        WHERE @r &lt;&gt; 0) T1
        JOIN sys_class T2
        ON T1._id = T2.id
        ORDER BY T1.lvl DESC

3.说明:

1.@r := #{classId} 这个语法表示:根据classid(文章所属目录id)查询所有父级的classid(包括本身的classid)
2.@r &lt;&gt; 0) 其中的 &lt;&gt;是在xml文件中的表示方法,在navicat中用 <> 代替

posted @ 2022-09-01 16:53  青喺半掩眉砂  阅读(752)  评论(0编辑  收藏  举报