从子类别中选择所有类别和所有项目

时间:2014-12-16 12:26:22

标签: php mysql sql

我正在努力建立自己的网店 我有两张桌子 - 产品和类别。结构是这样的:


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  

正如您所看到的,我当前的选择不会选择FerrariHonda,因为用户正在查看id=1的类别... 如何修改我的选择,以便它显示主类别的子类别中的所有产品?

3 个答案:

答案 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)

希望有所帮助