1

我有一个包含idparentname字段的类别表。字段允许一个类别成为另一个类别的子类别。

示例类别表,其中有两个主要类别(WIDGETS 和 THINGAMABOBS),并且 WIDGETS 有 3 个子类别:

  • id 1, null名称“WIDGETS”
  • id 2, 1名称“GADGETS”
  • id 3, 1名称“DOOHICKEYS”
  • id 4, 1名称“GIZMOS”
  • id 5, parent null , name "THINGAMABOBS

我有一个带有类别字段的产品

产品链接到“GIZMOS”类别的示例产品记录:

  • id 1,类别4,名称Contraption 5000

我希望能够在 SELECT 语句中提供类别名称并取回该类别中的所有产品。但我不仅想在“GIZMOS”上找到上面的记录,而且我还希望能够通过名称“WIDGET”找到它,因为MEDIUM WIDGET是WIDGET的一个子项。这应该适用于无限数量的级别(即:子子子类别)

为了使这更加复杂,我希望能够将产品分配给多个类别。也许他们会用逗号分隔?即:如果我希望Contraption 5000 存在于Doohickeys 和Thingamabobs 类别中,我会将3,5 放在类别字段中。

我的要求是否可以通过单个 select 语句实现?

4

2 回答 2

1

Do this in your application code! It will be much simpler and easier to maintain.

See also this similar post (actually there are many posts on this topic)

于 2012-11-29T21:06:59.407 回答
1

我将从你的问题的结尾开始:

为了使这更加复杂,我希望能够将产品分配给多个类别。也许他们会用逗号分隔?即:如果我希望Contraption 5000 存在于Doohickeys 和Thingamabobs 类别中,我会将3,5 放在类别字段中。

通过这样做,您将创建一个多对多关系,在这种情况下,您将需要一个名为的第三个表products_categories,该表包含两列:product_idcategory_id; 您category将从您的产品表中删除该列。

如果您希望 id=1 的产品属于类别 3 和 5,您将在 products_categories 中创建两行:

product_id | category_id
------------------------
1          | 3
1          | 5

现在到你问题的第一部分......

您需要做的是创建一个递归查询,我知道可以在 SQL Server 中完成,但老实说,我不确定是否可以在 MySQL 中完成。如果可以的话,我相信其他人会为您提供适当的答案。

于 2012-11-29T21:11:26.967 回答