当前位置: 首页 > 知识库问答 >
问题:

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

卫华奥
2023-03-14

我正在尝试建立自己的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个答案

斜俊
2023-03-14

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

潘佐
2023-03-14
"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
 类似资料:
  • 我有两个表的项目和类别。类别表是自联接表。 项目表具有以下列ID、项目名称、类别ID Categories表包含以下列CATID、category\u name、parent\u ID 我需要选择在一个类别和这个主类别的子类别下列出但不起作用的项目。这里是mysql,它只返回sub。

  • 问题内容: 我非常感谢您为我的问题提供的一些帮助: 我有2个MySQL表,类别和帖子,它们的布局(简化)如下: 类别 : CATID-名称-parent_id 帖子 : PID-名称-类别 我想做的是获取每个类别的帖子总数,包括子类别中的所有帖子。 现在,我通过执行以下操作来获取每个(顶级)类别(而不是子类别)中的帖子总数: 再次的问题是,如何获得每个类别的总计,包括每个相关子类别的总计? 由于我

  • 问题内容: 如何获得所选公司中所有员工的平均工资?我首先选择公司,然后传递ID,然后基于该ID,我将所有员工都带到那里并将其信息显示在表格中。目标是获得该组中每个人的平均工资。 问题答案: 您可以将薪金加起来,然后除以雇员数: 话虽如此,我敦促您在走那条路之前重新考虑。如果JSP内的代码超过1-2页,将严重阻碍您对其进行维护的机会。您的所有业务逻辑都应在代码中(例如,在Servlet中)发生,并且

  • 三个表保存文章信息: 类别表: lft:左值 rgt:正确的值 lft和rgt值为嵌套集,例如: 文章表: 物品类别地图表: 如何在MySQL中从一个类别和子类别中选择所有文章? 我期望: 1、 单击cat2时,显示cat2和cat5以及cat6和cat7的所有项目。 2、 单击cat5时,仅显示cat5的所有项目。 3、点击root时,显示所有类别的所有文章(包括cat1、cat2、cat3、c

  • 有一个类别,具有以下(重要)属性: 我正在尝试实现类别/子类别的概念。一个类别可以有零个或多个子类别。一个类别只能有一个父类别(可以为null)。对于顶级类别,parentCategory=null。 现在,我有一个所有类别的列表,

  • 我有2张桌子 类别 产品 如何选择所有产品并通过子类别加入主类别?产品类别只能有1或2或3或4个级别(未知级别)。 我在类别表中使用“with RECURSIVE”,但找不到将产品表与1次查询相结合的方法 最好的方法是什么? 预期结果 或