MySQL 多级父子 SP 和 IN 子句

标签 mysql sql

我正在处理一张 table referrals其中包含父子关系

enter image description here

我需要让 parent -> child -> 他们的 child -> ....

对于上面的表格数据,我想要的结果是

enter image description here

我已经看到了 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/

相关文章:

Php 循环和写入 MySql Db 的问题

mysql - SQL - 将用户定义的变量添加到表(mysql)?

sql - 如何合并多个 SELECT 结果?

sql - SQL Server 的 LIMIT 和 OFFSET 等效吗?

mysql - 更新查询不起作用

mysql - 过滤具有时间差的行

mysql - PHP MySQL 从 3 个表中选择

SQL请求按列中的值查找表中的项目

php - CakePHP:连接表数据未显示在 View 中

mysql - 计算 MySQL 中另一列的特定值在一列上重复值的数量?