상위 하위 범주에 대한 테이블 이름 pctable이 있습니다.상위 하위 범주에 대한 MySQL 함수
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;
이 x
은 그 버지니아와
WHERE parent_id IN(x);
를 교체 할 때,
"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"
은 그냥 참고하시기 바랍니다 당신이 http://stackoverflow.com/questions/5916482/php-mysql-best-tree-structure/ ([중첩 설정]을 조사한다 5916536 # 5916536)를 사용하여 계층 적 데이터를 관리합니다. – webbiedave