我正在努力建立自己的网店 我有两张桌子 - 产品和类别。结构是这样的:
categories :
id name parent_id
products :
id title category_id
当用户点击主要类别时,我正在选择要显示的产品:
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
正如您所看到的,我当前的选择不会选择Ferrari
或Honda
,因为用户正在查看id=1
的类别...
如何修改我的选择,以便它显示主类别的子类别中的所有产品?
答案 0 :(得分:2)
"SELECT * FROM products WHERE category_id = '$your_category_id'
OR category_id IN (
SELECT parent_id FROM categories
WHERE id = '$your_category_id'
)"
注意:此示例仅适用于两个级别的深度。
e.g。
Ferrari > Cars
它不超过两个级别。
e.g。
Ferrari Child Category > Ferrari > Cars
答案 1 :(得分:2)
如果类别树中有两个以上的级别,则需要一个单独的表(有时称为Closure表),该表将引用每个类别及其祖先/降序类别。请查看此链接以获取示例:https://stackoverflow.com/questions/tagged/transitive-closure-table
答案 2 :(得分:1)
如果层次结构只有一层深度,您可以像这样修改查询...
SELECT * FROM Products WHERE Category_id IN (
SELECT Id
FROM Categories
WHERE Id = 1 OR parent_id = 1)
希望有所帮助