SQL从指定的类别和所有子类别中选择所有产品

问题描述 投票:0回答:1

项目表

id    category_id    item_title
1     2              Seagate SSHD
2     3              Seagtate 2.5 inch HDD
3     4              Western Digital 3.5 inch HDD
4     4              Toshiba 3.5 inch HDD
5     5              Generic Used Monitor
6     6              ASUS Monitor

类别表

id    parent_id    category_title
1     0            Hardware
2     1            Hard Disks
3     2            Laptop Hard Disk
4     2            Desktop Hard Disk
5     1            Monitor
6     5            LCD Monitor

视觉:

                         -- Laptop Hard Disk
          -- Hard Disks |
 Harware-|               -- Desktop Hard Disk
          -- Monitors    -- LCD Monitor

查询:

SELECT * FROM items_table p
JOIN categories_table cp ON p.category_id = cp.id
JOIN categories_table cc ON cp.parent_id = cc.id
WHERE cc.id = "1"

输出

id    category_id    item_title
1     2              Seagate SSHD
5     5              Generic Used Monitor

但是我也在尝试从所有子类别中获取商品,即1.要求父类别时,必须显示父类别,子类别和孙子类别中的所有内容2.要求儿童类别时,必须显示儿童及其子女(孙子女)的所有内容

期望;当要求类别1(硬件)时]

id    category_id    item_title
1     2              Seagate SSHD
2     3              Seagtate 2.5 inch HDD
3     4              Western Digital 3.5 inch HDD
4     4              Toshiba 3.5 inch HDD
5     5              Generic Used Monitor
6     6              ASUS Monitor

当要求提供类别2(硬盘)时>]

id    category_id    item_title
1     2              Seagate SSHD
2     3              Seagtate 2.5 inch HDD
3     4              Western Digital 3.5 inch HDD
4     4              Toshiba 3.5 inch HDD

如何修改查询以从类别及其子类别中获取所有项目?

项目表ID category_id item_title 1 2 Seagate SSHD 2 3 Seagtate 2.5英寸硬盘3 4 Western Digital 3.5英寸硬盘4 4 Toshiba ...

mysql parent-child hierarchy hierarchical-data
1个回答
0
投票

我必须警告id-parentId方法(称为邻接表)不适用于任意级别的嵌套。但是,如果您知道它将仅是3层,那就顺其自然。否则,请查看诸如嵌套表或实体化路径之类的替代方法。

© www.soinside.com 2019 - 2024. All rights reserved.