mysql 类似 oracel start with 树查询 自定义函数


传入 参数  thisid  tablename 

thisid 要查询 自己的 数据ID  tablename 要查询的表

要求 表 主键 ==id  标识子父关系的 字段== pid

BEGIN
		DECLARE pTemp   VARCHAR(1000);
    DECLARE cTemp VARCHAR(1000);
			DECLARE te   VARCHAR(1000);
		
    SET pTemp = '$';
    SET cTemp = cast(thisid as CHAR);
  
    WHILE      cTemp is not null DO SET pTemp = concat(pTemp, ',', cTemp);
    set        @_sql = concat(' select CONCAT(a.ids) into @cTemp_result from ( SELECT group_concat(id) ids FROM ',
                            tablename,
                             ' WHERE FIND_IN_SET(pid,''',cTemp,''')>0 ) a ');
    PREPARE    a FROM @_sql;
    EXECUTE    a;
		DEALLOCATE PREPARE a;
	set cTemp = @cTemp_result;
  END WHILE;
  set @_sql = concat('SELECT * FROM ',
                    tablename,
                    ' WHERE FIND_IN_SET(id,''', pTemp,''') and id!=',
                   thisid);
  PREPARE b FROM @_sql;
  EXECUTE b;
  DEALLOCATE PREPARE b;
END


所有的测试数据  ID -PID 为 子父关系


执行查询 结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值