2012-10-23 111 views
1

我已經DB這樣的:SQL選擇指定類別的所有產品和兒童

categories(id, parent_id) 
items(id, category_id) 

,並將這些條目:

分類:

Paintings(id=1, parent_id=NULL), 
Landscape(id=2, parent_id=1) 

項目:

Painting1(id=1, category_id=2) 

我在嘗試g從指定的類別獲取所有項目。

例如:來自繪畫的所有項目將來自PaintingsLandscape以及作爲父母Paintings的任何類別。

我試圖執行此:

SELECT * FROM items p 
JOIN categories cp ON p.category_id = cp.id 
JOIN categories cc ON cc.parent_id = cp.id AND p.category_id = cc.id 
WHERE cp.id = "1" 

但它不工作,我沒有料到。

+0

您已將類別表格加入兩次。我想你想在上次加入時使用Items表 –

+0

首頁你可以有多個級別?我的意思是,你可以有另一個類別parent_id = 2;這種行爲可能會繼續。我認爲你不會用一個簡單的查詢來解決它,但有遞歸的東西... – Marco

+0

你可以有很多級別的類別(例如,繪畫1屬於「鄉村景觀」屬於「景觀」,屬於「繪畫」 ),還是隻有頂級和類別(即「繪畫」和「風景」)?如果前者,請注意,MySQL不允許遞歸查詢 - 請參閱更多這裏:http://stackoverflow.com/questions/8561654/how-to-work-with-recursive-query-in-mysql –

回答

1
SELECT * FROM items p 
JOIN categories cp ON p.category_id = cp.id 
JOIN categories cc ON cp.parent_id = cc.id 
WHERE cc.id = "1" 
+0

當我從具有父類別的類別中選擇項目時,它起作用。但是,當我選擇沒有父項的項目時,它不會。例如來自風景。 – mario199

+0

我加了另一個OR語句:'OR cp.id =「1」' – mario199