根据父id,查询子id集合的sql快速写法

我们的业务场景是根据父栏目id查询所有子栏目信息,这里提供了几种根据父id查询子id集合的一些方法,cms_channel表名,channel_id主键id,#channelId:VARCHAR#参数数据类型,总结下:
oracle数据库IBatis写法

select channel_id from cms_channel  start with parent_id =#channelId:VARCHAR#
			connect by prior channel_id=parent_id 

Mysql数据库IBatis写法

SELECT c.channel_id FROM
					(SELECT @id idlist, @lv := @lv + 1 lv,
						(SELECT @id := GROUP_CONCAT(channel_id SEPARATOR ',') FROM cms_channel WHERE FIND_IN_SET(parent_id, @id)) sub 
						FROM cms_channel, (SELECT @id := #channelId:VARCHAR#, @lv := 0) vars WHERE @id IS NOT NULL
					) t, cms_channel c 
				WHERE FIND_IN_SET(c.parent_id, t.idlist)

递归查询函数写法
函数定义:

DROP function IF EXISTS getSubChannelByPId;
create function getSubChannelByPId(pid VARCHAR(32))
returns varchar(4000)
BEGIN
DECLARE oTemp VARCHAR(4000);
DECLARE oTempChild VARCHAR(4000);
SET oTemp = '';
SET oTempChild = CAST(pid AS CHAR);
WHILE oTempChild IS NOT NULL
DO
SET oTemp = CONCAT(oTemp,',',oTempChild);
SELECT GROUP_CONCAT(channel_id) INTO oTempChild FROM cms_channel WHERE FIND_IN_SET(parent_id,oTempChild) > 0;
END WHILE;
RETURN oTemp;
END

IBatis写法

select CHANNEL_ID from cms_channel where FIND_IN_SET(c.parent_id,getSubChannelByPId(#channelId:VARCHAR#))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值