mysql在存储过程中根据父id查找所有下级节点,递归。
SET @sTemp = '$';
SET @sTempChd =cast(5 as CHAR);
WHILE @sTempChd is not null DO
SET @sTemp = concat(@sTemp,',',@sTempChd);
SELECT group_concat(id) into @sTempChd FROM account_item where FIND_IN_SET(parent_id,@sTempChd)>0;
END WHILE;
SELECT @sTemp;
假如最顶部的父节点的id为5,查找5下的所有子孙节点的id,拼接成字符串,用逗号隔开。
结果是:$,5,6,7,8,10,11,12,14,17,18,45,9,13,15,16
得到根节点下所有子ids后,就可以使用sql 的in来查找根节点下的所有记录
where id in($,5,6,7,8,10,11,12,14,17,18,45,9,13,15,16)