2016-06-21 23 views
1

私は以下のようなmysqlテーブル(cat_with_desc)を持っており、それらのカテゴリと親カテゴリで構成されています。lev1からすべてのlev2要素を取り除く

例:ラップトップの親は(4)コンピュータ(1)

enter image description here

そして、私は以下のようにすべての階層データを表示するために管理し、そのテーブルを用いています。

SELECT 
CONCAT_WS('-',t1.id,t1.name) AS lev1, 
CONCAT_WS('-',t2.id,t2.name) AS lev2, 
CONCAT_WS('-',t3.id,t3.name) AS lev3 
FROM cat_with_desc AS t1 
LEFT JOIN cat_with_desc AS t2 ON t2.parent_cat_id = t1.id 
LEFT JOIN cat_with_desc AS t3 ON t3.parent_cat_id = t2.id; 

enter image description here

は、しかし、私はLEV2とLEV3 LEV1内のデータと同様にLEV2列を持つLEV3データを必要といけません。 EX:4つのノートパソコン、5つのデスクトップ、6つのタッチスクリーンは、lev1の列にある必要はありません。

これは私が得る必要がある最終的なものです。

enter image description here

任意の提案は、あなたがappreciable.Thankだろう。 (いけないは私がここにLIMITを使用することをお勧め:D)

答えて

1

ちょうどフィルタリングにparent_idを使用します。

SELECT CONCAT_WS('-', t1.id, t1.name) AS lev1, 
     CONCAT_WS('-', t2.id, t2.name) AS lev2, 
     CONCAT_WS('-', t3.id, t3.name) AS lev3 
FROM cat_with_desc t1 LEFT JOIN 
    cat_with_desc t2 
    ON t2.parent_cat_id = t1.id LEFT JOIN 
    cat_with_desc t3 
    ON t3.parent_cat_id = t2.id 
WHERE t1.parent_cat_id = 0; 
関連する問題