我有一张桌子(类似的东西)
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组中的所有产品。
答案 0 :(得分:3)
您可能想重新考虑您的模型。每当您开始命名列_1,_2,_3等时,通常表明您的架构未规范化。产品的不同类型有什么不同?你能介绍一个这样的连接表: product_types:product_id,type_id
EDIT 听起来你有多对多的关系(即每个产品可以有多个组,每个组可以有多个产品)。要在像MySQL这样的关系数据库中实现这一点,您需要一个表来将您的产品加入您的组中,如下所示:
product_groups: product_id, group_id
然后,您可以使用相关的group_id在该表上按JOINing查询组中的所有产品。
修改强> 根据您提供的示例数据,我将重构您的架构,如此
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相关的外键。