2

在我的 MySQLproducts表中有一个名为 groups 的列,其中产品可以属于。此列中实际存储的是另一个名为groups.

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

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

where group={groupid}

但是如果一个产品可以属于多个组呢?

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

4

3 回答 3

3

您不应将产品列表存储在单个字段中。而不是 column products.groups,您应该有一个单独的 table 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`
于 2012-09-16T09:29:26.040 回答
1

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

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

于 2012-09-16T09:30:59.647 回答
1

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

不,请不要那样做!

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

product_group
product    group
1          4
1          8
1          10
1          42
于 2012-09-16T09:31:07.507 回答