千家信息网

oracle中的层级查询用mysql替换

发表于:2024-10-27 作者:千家信息网编辑
千家信息网最后更新 2024年10月27日,Oracle的Start with...Connect By实现了树的递归查询,但是现在要求用MYSQL也实现相同的递归查询树的功能。这个功能是我从以前从未使用到过的,于是,我上网查询、找了一些资料开
千家信息网最后更新 2024年10月27日oracle中的层级查询用mysql替换

Oracle的Start with...Connect By实现了树的递归查询,但是现在要求用MYSQL也实现相同的递归查询树的功能。这个功能是我从以前从未使用到过的,于是,我上网查询、找了一些资料开始做了起来。

原始的oracle语句为

select '|'||c.seq_cate||'|'

from osr_category c

start with c.seq_cate = #serviceCategory#

connect by prior c.seq_cate = c.parent_id)

mysql没有相应的方法实现递归查询树的功能,所以只好根据网上所说的那样写个函数来实现:

CREATE FUNCTION getChildList(rootId VARCHAR(1000))

RETURNS VARCHAR(1000)

BEGIN

DECLARE pTemp VARCHAR(1000);

DECLARE cTemp VARCHAR(1000);

SET pTemp='$';

SET cTemp=rootId;

WHILE cTemp is not null DO

set pTemp=CONCAT(pTemp,',',cTemp);

SELECT GROUP_CONCAT(SEQ_CATE) INTO cTemp from osr_category

WHERE FIND_IN_SET(PARENT_ID,cTemp)>0;

END WHILE;

RETURN pTemp;

END

随后其sql语句应该改为:

select '|'||c.seq_cate||'|'

from osr_category c

where FIND_IN_SET(c.seq_cate, getChildList(#serviceCategory#))



0