Mysql 递归获取所有父节点时使用变量
我尝试使用以下查询获取select中每个类别的所有父类别:Mysql 递归获取所有父节点时使用变量,mysql,prestashop,recursive-query,Mysql,Prestashop,Recursive Query,我尝试使用以下查询获取select中每个类别的所有父类别: 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
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\u类别\u id;家长身份证;P
1.0; 0
2.1.1,0
3.1.1,0
4.2.2,1,0
...
但似乎有些东西不适用于@r和@c的初始化,我做错了什么
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,并且在内部查询中使用该变量。所以我对内部查询进行了初始化。所以自动更新的值将填充到外部查询中
希望这对你有帮助
我的产量不足
您期望的结果是什么?我已经解决了这个问题
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
虽然这个查询可能是正确的答案,但如果您解释它的作用,而不是仅仅在您的帖子中转储它,那会好得多。@Shadow我已经更新了我的答案。并尝试进行解释。使用@c value的内部查询在select列表中,而不是from子句中。这样@c总是设置为0,这似乎不是OP需要的。不幸的是,不是:您可以尝试使用此数据创建表ps\u category id\u category int10 UNSIGNED not NULL,id\u parent int10 UNSIGNED not NULL;在ps_类别id_类别中插入id_父值1、0、2、1、3、1、4、2、5、2、6、4;