MySQL多级父子SP和IN子句
我正在处理一个包含父子关系的表引用 我需要得到父母->孩子->其他孩子-> 对于上表数据,我希望的结果是 我看过一些来自软件的代码,但不知道它们是如何工作的,我试着用一个非常简单的逻辑在我的脑海中,但不恰当的是,它不工作,因为一个奇怪的原因 我已经为它编写了存储过程,但遇到了IN子句的问题 首先,我在第一个查询A中获得了我想要的主父级的子级,工作正常 然后,将主父级的子级放入变量@idss query B中,工作正常 然后在循环中,我在查询中使用变量idss获取其子查询C,并将它们放入结果表中。。。这是有问题的部分 在这里,对于第一次迭代,我在变量idss中有11112222,这将导致在表中插入值{3333,4444}1111的child,和{5555}2222的child,但它只将1111的子项,即33334444,而不是5555 我尝试将查询C中的变量替换为check,它在Claues中的值为11112222'时运行良好` 关于IN子句为什么不接受组concat中逗号分隔的值,或者关于修复此代码的任何想法 关于请在@idss\u SETuid1中尝试此查找 您必须替换此查询部分 从@idss中uid1所在的转介中选择GROUP_CONCATuid2 进入这个 在@idss中的\u SETuid1中查找\u的推荐中选择组\u CONCATuid2MySQL多级父子SP和IN子句,mysql,sql,Mysql,Sql,我正在处理一个包含父子关系的表引用 我需要得到父母->孩子->其他孩子-> 对于上表数据,我希望的结果是 我看过一些来自软件的代码,但不知道它们是如何工作的,我试着用一个非常简单的逻辑在我的脑海中,但不恰当的是,它不工作,因为一个奇怪的原因 我已经为它编写了存储过程,但遇到了IN子句的问题 首先,我在第一个查询A中获得了我想要的主父级的子级,工作正常 然后,将主父级的子级放入变量@idss query B中,工作正常 然后在循环中,我在查询中使用变量idss获取其子查询C,并将它们放入结果表中。
我希望它能为您服务……MySQL不支持递归函数,因此它不太适合这种存储分层数据的邻接列表模型。您应该考虑使用嵌套集合或闭包表重构数据。有关更多信息,请参阅。这一点需要注意。。。从x中选择*,其中y在1,2,3中与从x中选择*,其中y在“1,2,3”中根本不同。在第一种情况下,有3个整数项,但在第二种情况下,只有一个项,并且该项是一个字符串。MySQL不将该字符串视为数字列表;您有一个字符串列表,只有一项。要将字符串转换为整数列表,需要查找拆分函数;网上有很多。这样一个函数可以用于类似的查询:SELECT*FROM x,其中y在SELECT*FROM fn_split'1,2,3'AS list.hey it worked man!对不起,我从来没听说过这个功能。。只有一个问题;查询的性能。。谷歌正在对此大惊小怪。如果你能分享一些链接,它可能会帮助我更多。。。当做:
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();