Java-递归查询法
递归查询用户所在团队的老大的用户id(一个团队中,只有一个老大,也就是父级id="-1")
一、递归查询递归查询用户所在团队的老大的用户id
如下:是表结构
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.目录表 表结构如下:
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 <> 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 <> 0)
其中的 <>
是在xml文件中的表示方法,在navicat中用 <>
代替
本文来自博客园,作者:青喺半掩眉砂,转载请注明原文链接:https://www.cnblogs.com/xiaoguo-java/p/16647117.html