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#))