优化代码,不知道怎么写。

weixin_44258890 2019-09-09 06:09:26
很感谢大神进来。
我下面代码有个问题。要一直持续 循环下去。 不知道怎么写了。 这个我只写到了5级。 但实际情况可能有20级。。。感谢大神帮我解决下啊。谢谢。
SELECT id,hhr_name,parent_id,tjr_id FROM gbi_hhr WHERE id = 90 

OR
id IN ((SELECT id FROM gbi_hhr WHERE tjr_id = 90 AND sf_type ='战略') )

OR
id IN (SELECT id FROM gbi_hhr WHERE sf_type != '战略' AND tjr_id IN (SELECT id FROM gbi_hhr WHERE id IN ((SELECT id FROM gbi_hhr WHERE tjr_id = 90 AND sf_type ='战略') )) )

OR
id IN (SELECT id FROM gbi_hhr WHERE sf_type != '战略' AND tjr_id IN (SELECT id FROM gbi_hhr WHERE sf_type != '战略' AND tjr_id IN (SELECT id FROM gbi_hhr WHERE id IN ((SELECT id FROM gbi_hhr WHERE tjr_id = 90 AND sf_type ='战略') )) ) )

OR
id IN (SELECT id FROM gbi_hhr WHERE sf_type != '战略' AND tjr_id IN (SELECT id FROM gbi_hhr WHERE sf_type != '战略' AND tjr_id IN (SELECT id FROM gbi_hhr WHERE sf_type != '战略' AND tjr_id IN (SELECT id FROM gbi_hhr WHERE id IN ((SELECT id FROM gbi_hhr WHERE tjr_id = 90 AND sf_type ='战略') ))) ) )
...全文
140 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_44258890 2019-09-11
  • 打赏
  • 举报
回复
引用 2 楼 weixin_44258890 的回复:
@stelf 感谢你的回答。 递归 怎么写。可以给我个 示例代码吗。 谢谢。 刚刚学这个。不太懂。
好的。非常感谢。 我的本意是想查询:递归查询所有父子节点(往下查询所有。就是想查询他的下面的所有团队的成员出来,然后统计他们的业绩。再计算团队奖励。他们下面的团队可能会有N层。这样的。另外还有一些条件不能享受。)
sulinly 2019-09-11
  • 打赏
  • 举报
回复
mysql不支持递归类型的查询语句,只能编函数给你个函数例子:
DROP FUNCTION IF EXISTS queryChildrenAreaInfo;
CREATE FUNCTION queryChildrenAreaInfo(areaId INT)
RETURNS VARCHAR(4000)
BEGIN
DECLARE sTemp VARCHAR(4000);
DECLARE sTempChd VARCHAR(4000);

SET sTemp='$';
SET sTempChd = CAST(areaId AS CHAR);

WHILE sTempChd IS NOT NULL DO
SET sTemp= CONCAT(sTemp,',',sTempChd);
SELECT GROUP_CONCAT(id) INTO sTempChd FROM t_areainfo WHERE FIND_IN_SET(parentId,sTempChd)>0;
END WHILE;
RETURN sTemp;
END;
sulinly 2019-09-11
  • 打赏
  • 举报
回复
引用 4 楼 weixin_44258890 的回复:
[quote=引用 2 楼 weixin_44258890 的回复:]
@stelf 感谢你的回答。 递归 怎么写。可以给我个 示例代码吗。 谢谢。 刚刚学这个。不太懂。
好的。非常感谢。

我的本意是想查询:递归查询所有父子节点(往下查询所有。就是想查询他的下面的所有团队的成员出来,然后统计他们的业绩。再计算团队奖励。他们下面的团队可能会有N层。这样的。另外还有一些条件不能享受。)[/quote]
不知道层数只能只能使用函数实现。变个递归函数就行了。
weixin_44258890 2019-09-10
  • 打赏
  • 举报
回复
@stelf 感谢你的回答。 递归 怎么写。可以给我个 示例代码吗。 谢谢。 刚刚学这个。不太懂。
stelf 2019-09-10
  • 打赏
  • 举报
回复
用递归试试呗
sulinly 2019-09-10
  • 打赏
  • 举报
回复
你这个代码设计思路有严重问题,五级是啥概念,你算一下:假设你有100条记录符合那要执行100x100x100x100x100次。不明白你的思路是啥。帮你简化第二段:id IN ((SELECT id FROM gbi_hhr WHERE tjr_id = 90 AND sf_type ='战略') )这条可以简化为:tjr_id = 90 AND sf_type ='战略'其他的你自己弄嘛。

56,940

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧