MySQL:'产品'可以属于多个组?

时间:2012-09-16 09:25:42

标签: mysql

在我的MySQL products表中,有一个名为groups的列,产品可以属于。此列中实际存储的是另一个名为groups的表格的ID。

如果我想选择属于特定群组的产品怎么办?

如果产品只能属于一个组,我可以简单地使用

where group={groupid}

但是,如果产品可以属于多个群体怎么办?

我可以像这样存储它们:' 4,8,10,42 ',这些数字中的每一个都代表group个ID。 但那我该如何查询选择?

3 个答案:

答案 0 :(得分:3)

您不应将产品列表存储在单个字段中。您应该有一个单独的表products.groups,而不是列product_groups (product_id, group_id),您可以在其中存储产品和组之间的每个关联。然后,您可以选择组中的所有产品:

SELECT product.*
FROM product_groups
INNER JOIN products ON (products.id = product_groups.product_id)
WHERE product_groups.group_id = :group_id`

答案 1 :(得分:1)

数据库结构是您必须在此处观看的结构 如果您希望产品具有多个组,则必须创建产品和组连接到的第三个表。然后,您所要做的就是将产品ID映射到组ID

如果产品只属于一个组,则该表中只有一个条目,但如果它属于多个组,那么它将具有(最终)多个条目

答案 2 :(得分:1)

  

我可以像这样存储它们:'4,8,10,42',

不,请这样做!

有一种完全众所周知,标准,高效且经过良好测试的最佳实践,用于创建多对多关系,称为join table。以下是如何使用连接表来表示产品1是组4,8,10和42的成员:

product_group
product    group
1          4
1          8
1          10
1          42