我正在处理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();
首先,我在第一个查询中得到我想要的主要父母的孩子A
,工作正常
然后,将主父级的子级获取到变量@idss
查询B
中,工作正常
然后在循环中我使用idss
查询中的变量来获取其子查询C
并将它们放入结果表中......这是有问题的部分
这里是我1111,2222
在变量中的第一次迭代,idss
这应该会导致在表中插入值{3333, 4444} child of 1111, and {5555} child of 2222
,但它只放置了1111
ie的子级,3333,4444
而不是5555
我尝试从查询中替换变量C
以进行检查,并且它与1111,2222' within
IN Claues中的值一起工作正常`
关于为什么 IN 子句不接受来自组 concat 的逗号分隔值的任何想法或关于修复此代码的任何想法
问候