我有一个类别表,其中包含id、parent和name字段。父字段允许一个类别成为另一个类别的子类别。
示例categories表中有两个主要类别(WIDGETS和THINGAMABOBS),WIDGETS有3个子类别:
- id1,parentnull,名称"WIDGETS">
- id2,父级1,name"GADGETS">
- id3,父级1,name"DOOHICKEYS">
- id4,父项1,name"GIZMOS">
- id5,父级null,name"THINGAMABOBS
我有一个产品表,其中包含类别字段
示例产品记录产品链接到"GIZMOS"类别的位置:
- id1,类别4,name禁忌症5000
我希望能够在SELECT语句中提供类别名称,并取回该类别中的所有产品。但我不仅想在"GIZMOS"上找到上面的记录,而且我还想能够以"WIDGET"的名称找到它,因为MEDIUM WIDGET是WIDGET的子代。这应该适用于未限制数量的级别(即:子类别)
为了使这变得更加复杂,我希望能够将一个产品分配到多个类别。也许它们会用逗号分隔?即:如果我想让Contraction 5000存在于Doohickeys和Thingamabobs类别中,我会将3,5放在类别字段中。
我所问的问题是否可以通过一个select语句实现?
我将从问题的末尾开始:
为了使这变得更加复杂,我希望能够将一个产品分配到多个类别。也许它们会用逗号分隔?即:如果我想让Contraction 5000存在于Doohickeys和Thingamabobs类别中,我会在类别字段中输入3,5。
通过这样做,您将创建一个多对多关系,在这种情况下,您将需要一个名为products_categories
的第三个表,该表包含两列:product_id
和category_id
;您应该从产品表中删除category
列。
如果您希望id=1的产品属于类别3和5,那么您可以在products_categories中创建两行:
product_id | category_id
------------------------
1 | 3
1 | 5
现在来看你问题的第一部分。。。
您需要做的是创建一个递归查询,我知道这可以在SQL Server中完成,但老实说,我不确定是否可以在MySQL中完成。如果可以的话,我相信其他人会为你想出一个合适的答案。
在应用程序代码中执行此操作!它将更简单、更容易维护。
另请参阅这个类似的帖子(实际上有很多关于这个主题的帖子)