【发布时间】:2012-11-29 21:02:25
【问题描述】:
我有一个 categories 表,其中包含 id、parent 和 name 字段。 parent 字段允许一个类别成为另一个类别的子类别。
示例 categories 表,其中有两个主要类别(WIDGETS 和 THINGAMABOBS),并且 WIDGETS 有 3 个子类别:
- id 1, parent null, name "WIDGETS"
- id 2,父 1,名称“小工具”
- id 3,父 1,名称“DOOHICKEYS”
- id 4,父 1,名称“GIZMOS”
- id 5, parent null, name "THINGAMABOBS
我有一个带有 category 字段的 products 表
示例产品记录,其中产品链接到“GIZMOS”类别:
- id 1, category 4, 名称 装置5000
我希望能够在 SELECT 语句中提供类别名称并返回该类别中的所有 产品。但是我不仅想在“GIZMOS”上找到上面的记录,而且我还希望能够通过名称“WIDGET”找到它,因为MEDIUM WIDGET是WIDGET的子项。这应该适用于无限数量的级别(即:子子子类别)
为了使这更加复杂,我希望能够将一种产品分配给多个类别。也许他们会用逗号分隔?即:如果我希望 Contraption 5000 存在于 Doohickeys 和 Thingamabobs 类别中,我会将 3,5 放在 category 字段中。
我的要求是否可以通过单个 select 语句实现?
【问题讨论】:
-
不要通过形成逗号分隔的字符串将产品分配给多个类别。制作正确的查找表:ProductCategory ProductCategoryID ProductID CategoryID。它会为你省去很多痛苦。