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

标签 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  @r := @c
        ) vars,
        ps_category  c2
        where @r<>0)  p
from   ps_category  c
join (select @c:=0) tmp

我希望得到这样的东西: id_category_id; 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,并且您在内部查询中使用该变量。所以我已经对内部查询进行了初始化。所以自动更新的值将填充到外部查询。

希望这对您有帮助。

我得到以下输出 enter image description here
您的预期输出是什么?

关于mysql - 递归获取所有父节点时使用变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44670491/

相关文章:

smarty - 在 Prestashop 中传递翻译字符串内的变量

postgresql - 具有自引用连接条件的 Postgres 计数

google-analytics - Prestashop - 在 Google Analytics 中发送订单事件

mysql - 特定字段更新时的时间戳

php - 用于获取用户队列的 SQL - 对于游戏

php - 循环遍历mysql数据库记录并更改电话格式

php - Prestashop - 如何将自定义输入字段添加到产品自定义并写入数据库

c# - SQLite递归查询获取树的第一个分支

database - Oracle - 执行递归 'WITH' 查询时检测到循环

mysql - 基于文档的数据库为何如此之快?