提问者:小点点

选择类别中的所有项及其子类别中的所有项


我正在尝试建立自己的Webshop。
我有两个表-products和categories。结构是这样的:

categories :
id       name       parent_id  
products :
id       title      category_id  

当用户点击main category时,我选择要显示的产品如下所示:

url : www.mypage.com/?category_id=1
sql : 'SELECT * FROM products WHERE category_id = 1'  

问题是,我希望当用户单击主类别时,也可以选择其子类别中的所有产品。例如,类别family是类别cars的子类别,在db中类似于

categories :
id       name       parent_id  
1        'Cars'     0
2        'Family'   1  
3        'Sport'    1  

products :
id       title      category_id  
1        'Ferrari'  3 
2        'Honda'    2  

如您所见,我的当前选择将不会选择法拉利本田,因为用户正在查看具有ID=1的类别...如何修改我的选择,使它将显示所有产品从主类别的子类别?


共2个答案

匿名用户

"SELECT * FROM products WHERE category_id = '$your_category_id'
OR category_id IN (
  SELECT parent_id FROM categories 
    WHERE id = '$your_category_id'
)"

注意:此示例仅适用于两级深度。

例如。

Ferrari > Cars

不超过两级。

例如。

Ferrari Child Category > Ferrari > Cars

匿名用户

如果在类别树中有两个以上的级别,则需要一个单独的表(有时称为闭包表),它将引用每个类别及其祖先/降序类别。查看此链接查看示例:https://stackoverflow.com/questions/tagged/transitive-closure-table