2017-06-21 29 views
2

すべての親ノードを取得するときに変数を使用して、私は次のクエリ使用して選択して、各カテゴリのすべての親カテゴリを取得してみてください。私はこのような何かを得ることを期待再帰的

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の初期設定で作業していますが、間違っていますか?

答えて

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:[email protected]) 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
あなたの期待する出力は?このクエリは、正しい答えであるかもしれないが、あなたはそれだけであなたのポストでそれをダンプするのではなく、何をするか説明している場合

+0

を整理しました、それは多くの方が良いだろう。 – Shadow

+0

@ Shadow私は私の答えを更新しました。そして同じことを説明しよう。 –

+0

@c値が使用される内部クエリは、from句ではなくselectリストにあります。このようにして、@ cは常に0に設定されます。これは、OPに必要なものではないようです。 – Shadow

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