MySQL复杂的关系SELECT

时间:2012-11-29 21:02:25

标签: mysql sql

我的类别表包含 id 名称字段。 字段允许类别成为另一个类别的子类别。

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

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

我的产品表包含类别字段

示例产品记录产品与“GIZMOS”类别相关联的位置:

  • id 1, category 4, name Contraption 5000

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

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

我用单个选择语句可以提出什么问题?

2 个答案:

答案 0 :(得分:1)

在您的应用程序代码中执行此操作!它将更简单,更容易维护。

另请参阅this similar post(实际上there are many posts on this topic

答案 1 :(得分:1)

我将在你的问题结束时开始:

  

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

通过执行此操作,您将创建多对多关系,在这种情况下,您需要一个名为products_categories的第三个表,其中包含两列:product_id和{{1} };您从产品表中删除了category_id列。

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

category

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

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