2011-11-29 60 views
0

我有一个表(类似)MySQL的 - 多加入

product: id, name, type 
product_type: id, name, group_id 
product_group: id, name 

这个模型是工作正常,我建立了联接表的查询,所以我可以问得有产品组14或类型的所有产品12 ..

现在我面临一个问题,我需要为产品添加更多类型。

product: id, name, type, type_1, type_2, type_3 
product_type: id, name, group_id 
product_group: id, name 

在此之后我写了一个查询可以检索type=12 or type_1=12 or type_2=12,但我不知道如何编写一个查询,将检索if group=14 or group_1=14

我的查询是:

SELECT product.*, 
     product_group.group_name 
FROM product, 
    product_group, 
    product_type 
WHERE product.product_type = product_type.id 
    AND product_group.id = product_type.product_group 
    AND product_group=14 

如何添加:

(... or product_group_1=14 or product_group_2=14) 

感谢您的帮助,这里是一些例子

- product: id=2, name=cleaning kit, type=6 (photo accessorioes), type_1=9 (video accessorioes), type_2=33 (cleaning supply) 
--------------------------------- 
- type: id=6, name=photo accessorioes, group=12 (photo equipment) 
- type: id=9, name=video accessorioes, group=14 (video equipment) 
- type: id=33, name=cleaning supply, group=31 (some group) 
--------------------------------- 
- group: id=12, name=photo equipment 
- group: id=14, name=video equipment 
- group: id=31, name=some group 

现在我需要找到所有产品例如,在组14中。

回答

3

您可能想重新考虑您的模型。每当你开始命名列_1,_2,_3等时,它通常表明你的模式没有被标准化。产品的不同类型有什么不同?你能介绍一下这样的连接表: product_types:PRODUCT_ID,TYPE_ID

编辑 这听起来像是你有很多一对多关系(即每一个产品可以有多个组,每个组可以有不止一个产品)。要像MySQL,你需要一个表来加入你的产品你的组这样的关系数据库实现这一点:

product_groups: product_id, group_id 

您可以通过JOINing上使用相关GROUP_ID该表,然后查询所有产品在一组。

编辑 根据您提供我会调整你的模式是这样

product: id=2, name=cleaning kit, 
--------------------------------- 
product_types: product_id=2, type_id=6 
product_types: product_id=2, type_id=9 
product_types: product_id=2, type_id=33 
--------------------------------- 
type: id=6, name=photo accessorioes, group=12 (photo equipment) 
type: id=9, name=video accessorioes, group=14 (video equipment) 
type: id=33, name=cleaning supply, group=31 (some group) 
--------------------------------- 
group: id=12, name=photo equipment 
group: id=14, name=video equipment 
group: id=31, name=some group 

的product_types表将是一个连接表上的product_id和TYPE_ID多列主键的示例数据。这些列分别是与product.id和type.id有关的外键。

+0

我有网站有产品。 像(佳能500D)的产品有它们的类型(dslr)和组(照片设备) 我有3个基本页面:产品页面(500d),product_type页面(用于dslr)和product_group页面(用于多种类型的照片设备)。 添加产品的product_type_1,product_type_2 ...页面没有改变,产品类型的页面有新的查询,并显示来自类型type_1的产品,但是我不知道如何为产品组做这件事,因为查询对我来说变得复杂了解如何编写它 – day

+0

@天我编辑了我的答案,试着让它更清晰。 – liquorvicar

+0

ty liquorvicar你的时间,我编辑的主要帖子,并希望它可以帮助获得解决方案 – day