我正在尝试建立自己的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
的类别...如何修改我的选择,使它将显示所有产品从主类别的子类别?
"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