我正在处理一个包含父子关系的表
我需要找到父母->孩子->其他孩子->…
对于上表数据,我希望得到的结果是
我看到了一些来自sof的代码,但不知道它们是如何工作的,我试着用一个非常简单的逻辑在我的头脑中,但不幸的是它没有工作,因为一个奇怪的原因
我已经为它编写了存储过程,但遇到了referrals
的问题。
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();
首先,我在第一个查询中得到我想要的主父项的子项,运行良好
然后,将主父级的子级放入变量
IN CLAUSE
queryA
,运行良好然后在循环中,我使用查询中的变量
@idss
获取其子查询B
,并将它们放入结果表中…这是有问题的部分在这里,对于第一次迭代,我在变量
idss
中有C
,这将导致在表中插入值1111,2222
,但它只将idss
ie{3333, 4444} child of 1111, and {5555} child of 2222
的子项,而不是1111
我试图替换query
3333,4444
中的变量以进行检查,它在claues中的值5555
中运行良好`关于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);
我希望它能为你工作…