递归获取所有父节点时使用变量

时间:2017-06-21 08:17:33

标签: mysql prestashop recursive-query

我尝试使用以下查询获取每个类别的所有父类别:

select @c := c.id_category,c.id_parent,
(SELECT 
      GROUP_CONCAT( @r := (
        SELECT  c1.id_parent
        FROM    ps_category c1 
        WHERE   c1.id_category = @r
        )) AS parent

FROM    (
        SELECT  @r := @c
        ) vars,
        ps_category  c2
        where @r<>0)  p
from   ps_category  c
join (select @c:=0) tmp

我希望得到这样的结果: id_category_id; id_parent; p 1; 0; 0 2; 1; 1,0 3; 1; 1,0 4; 2; 2,1,0 ... 但似乎有些事情与@r@c的初始化无关,我做错了什么?

2 个答案:

答案 0 :(得分:1)

  SELECT 
        @c:=c.id_category,
        c.id_parent,
        (SELECT 
                GROUP_CONCAT(@r:=(SELECT 
                                c1.id_parent
                            FROM
                                ps_category c1
                            WHERE
                                c1.id_category = @r)) AS parent
            FROM
                (SELECT @r:=@c) vars,(select @c:=0)Z, <!------- i had made changes at this line>
                ps_category c2
            WHERE
                @r <> 0) p
    FROM
        ps_category c

尝试以上查询。

正如评论中提到的那样,你在外部查询中初始化变量@c,并且你在内部查询中使用该变量。所以我已经对内部查询进行了初始化。因此,自动更新的值将填充到外部查询。

希望这会对你有所帮助。

我得到了以下输出 enter image description here
您的预期产量是多少?

答案 1 :(得分:1)

我已经解决了这个问题

  SELECT 
    @r:=c.id_category id_category,
    c.id_parent,
    (select GROUP_CONCAT(@r:=(SELECT 
                            c1.id_parent
                        FROM
                            ps_category c1
                        WHERE
                            c1.id_category = @r)) AS p
    from ps_category c2                        
    ) as parents

  FROM
    ps_category c, 
    (select @r:=0) Z

  group by c.id_category, c.id_parent         
相关问题