我的类别表包含 id ,父和名称字段。 父字段允许类别成为另一个类别的子类别。
示例类别表,其中有两个主要类别(WIDGETS和THINGAMABOBS),WIDGETS有3个子类别:
我的产品表包含类别字段
示例产品记录产品与“GIZMOS”类别相关联的位置:
我希望能够在SELECT语句中提供类别名称,并返回该类别中的所有产品。但我不仅要在“GIZMOS”上找到上述记录,而且我还希望能够通过名称“WIDGET”找到它,因为MEDIUM WIDGET是WIDGET的孩子。这应该适用于无限数量的级别(即:子子类别)
为了使这更加复杂,我希望能够将产品分配到多个类别。也许他们会用逗号分开?即:如果我希望Contraption 5000存在于Doohickeys和Thingamabobs类别中,我会在类别字段中添加3,5。
我用单个选择语句可以提出什么问题?
答案 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中完成。如果可以的话,我确定其他人会为你找到合适的答案。