我正在处理一个包含父子关系的表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,并将它们放入结果表中……这是有问题的部分。
在这里,对于第一次迭代,我在变量idss中使用了1111,2222,这将导致在表中插入值{3333, 4444} child of 1111, and {5555} child of 2222,但它只放入1111的子项,即3333,4444,而不是5555
我尝试替换查询C中的变量进行检查,它与Claues`中的值1111,2222' within一起工作得很好。
您是否知道IN子句为什么不接受来自group concat的逗号分隔值或修复此代码的任何想法
问候
发布于 2012-06-11 19:03:02
尝试此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);
我希望这对你有用……
https://stackoverflow.com/questions/10977921
复制相似问题