2015-08-08 99 views
2

我想檢索所有具有產品的類別的層次結構。篩選出沒有項目的類別

這裏是我的表結構: enter image description here

和類別結構將是:

Categ A 
     ^--Categ B 
       ^--Categ C 
         ^-- Prod 1 
         ^-- Prod 2 
       ^--Categ D 
     ^--Categ E 
       ^--Categ F 
       ^--Categ G 

對於上面顯示我想篩選出CATEG d,CATEG E,CATEG F中的結構,類別G,因爲它們沒有任何產品有產品的任何子類別。

+0

請顯示一些示例數據。 –

+0

我不認爲這種情況需要樣本數據。 –

回答

0

爲什麼不用一個產品取代所有類別,而是不使用一個類別去除類別?第一件事可以通過內連接完成:

SELECT * 
FROM category_product as a 
JOIN product as b 
ON a.prod_id = b.id 
+0

如果我按照自己的方式進行操作,我將僅獲得具有產品的類別,但我需要分類結構。 –

1

您可以迭代地做到這一點。只需運行此刪除操作,直至不返回任何記錄:

delete c 
    from category c left join 
     category child 
     on c.id = child.parent_id 
    where child.id is null and 
      not exists (select 1 from category_productd cp where cp.categ_id = c.id) ; 

您擁有分層數據結構。除了循環之外,MySQL確實不支持這樣的結構。

+0

對不起,我編輯了最後一行。我想過濾掉不從數據庫中刪除它們。 –