我尝试使用以下查询获取每个类别的所有父类别:
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
的初始化无关,我做错了什么?
答案 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
,并且你在内部查询中使用该变量。所以我已经对内部查询进行了初始化。因此,自动更新的值将填充到外部查询。
希望这会对你有所帮助。
答案 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