我正在制作一个referrals包含父子关系的表

我需要得到父母 - >孩子 - >儿童 - > ....
对于上表数据我想要的结果是

我已经看过SOF的一些代码,但是没有得到他们的工作方式,并且在我脑海中尝试了一个非常简单的逻辑,但不幸的是它不能用于一个奇怪的原因
我已经为它编写了存储过程,但我遇到了问题 IN CLAUSE
DELIMITER $$
DROP PROCEDURE IF EXISTS `GetHierarchy3`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `GetHierarchy3`()
BEGIN
DECLARE idss VARCHAR(225);
SET @currentParentID := 999999;
SET @lastRowCount := 0;
## A ##
INSERT INTO referrals_copy SELECT * FROM referrals WHERE uid1 = @currentParentID;
SET @lastRowCount := ROW_COUNT();
## B ##
SELECT GROUP_CONCAT(uid2) INTO @idss FROM referrals WHERE uid1 = @currentParentID;
#SELECT @lastRowCount;
SELECT * FROM referrals_copy;
WHILE @lastRowCount > 0 DO
SELECT "here";
SELECT @idss;
## C ##
INSERT INTO referrals_copy SELECT uid1, uid2 FROM referrals
WHERE uid1 IN (@idss);
SET @lastRowCount := ROW_COUNT();
#set @ids := NULL;
SELECT @idss;
SELECT GROUP_CONCAT(uid2) FROM referrals WHERE uid1 IN (@idss);
SELECT @idss;
SET @lastRowCount := 0;
END WHILE;
-- return the final set now
SELECT
*
FROM referrals_copy;
END$$
CALL GetHierarchy3();
Run Code Online (Sandbox Code Playgroud)
首先,我在第一个查询中得到了我想要的主要父项的子项A,工作正常
然后,让主要父级的子进入变量@idss查询B,工作正常
然后在循环中我使用idss查询中的变量来获取它的子查询C并将它们放在结果表中...这是有问题的部分
这里是我1111,2222在变量中的第一次迭代,idss它应该导致在{3333, 4444} child of 1111, and {5555} child of 2222表中插入值,但它只放置1111ie 的子元素,3333,4444但不是5555
我试图将查询中的变量替换C为检查,并且它在值为1111,2222' withinIN Claues`时工作正常
任何想法为什么IN子句不接受组concat中的逗号分隔值或修改此代码的任何想法
问候
试试这个 FIND_IN_SET(uid1,@idss)
您必须替换此查询部分
SELECT GROUP_CONCAT(uid2) FROM referrals WHERE uid1 IN (@idss);
进入这个
SELECT GROUP_CONCAT(uid2) FROM referrals WHERE FIND_IN_SET(uid1,@idss);
我希望它为你工作....