【发布时间】:2014-11-07 07:29:50
【问题描述】:
我有父子类别的表名 pctable。
id parent_id
2322 0
2323 2322
2324 2322
2335 2322
2336 2322
2337 2322
4869 2322
5121 2322
6033 2322
6783 2322
1061 2323
4870 4869
4871 4869
4872 4869
4873 4869
6034 6033
6059 6033
我写了一个mysql函数来获取逗号分隔字符串中的所有父子。
DELIMITER $$
DROP FUNCTION IF EXISTS getBaseID $$
CREATE FUNCTION getBaseID(articleID varchar(1024)) RETURNS TEXT
BEGIN
DECLARE x TEXT;
DECLARE y TEXT;
DECLARE rtext TEXT;
SET rtext = "";
SET x = articleID;
sloop:LOOP
SET y = NULL;
SELECT SQL_CACHE GROUP_CONCAT(id) INTO y FROM pctable WHERE parent_id IN(x);
IF y IS NULL THEN
LEAVE sloop;
END IF;
SET x = y;
SET rtext = CONCAT(rtext,',',x);
ITERATE sloop;
END LOOP;
RETURN rtext;
END $$
DELIMITER ;
当我调用函数时,它返回了错误的数据。
SELECT getBaseID(2322) FROM pctable LIMIT 1;
它回来了
"2323,2324,2335,2336,2337,4869,5121,6033,6783,1061"
但它应该返回
"2323,2324,2335,2336,2337,4869,5121,6033,6783,1061,4870,4871,4872,4873,6034,6059"
【问题讨论】:
-
仅供参考,您应该查看Nested Sets 以管理分层数据。