2012-10-23 80 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