我正在处理一张 table referrals
其中包含父子关系
我需要让 parent -> child -> 他们的 child -> ....
对于上面的表格数据,我想要的结果是
我已经看到了 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
的子项即3333,4444
但是,不是5555
我尝试替换查询 C
中的变量检查一下,它在值 1111,2222' within
上运行良好在克劳斯`
关于为什么 IN 子句不接受组连接中的逗号分隔值的任何想法或修复此代码的任何想法
问候
最佳答案
试试这个FIND_IN_SET(uid1,@idss)
您必须替换此查询部分
从推荐中选择 GROUP_CONCAT(uid2) WHERE uid1 IN (@idss);
进入此
从推荐中选择 GROUP_CONCAT(uid2) WHERE FIND_IN_SET(uid1,@idss);
我希望它对你有用......
关于MySQL 多级父子 SP 和 IN 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10977921/