在我的 MySQLproducts
表中有一个名为 groups 的列,其中产品可以属于。此列中实际存储的是另一个名为groups
.
如果我想选择属于特定组的产品怎么办?
如果一个产品只能属于一个组,我可以简单地使用
where group={groupid}
但是如果一个产品可以属于多个组呢?
我可以像这样存储它们:' 4,8,10,42 ',这些数字中的每一个都表示一个group
id。但是,我将如何查询选择?
在我的 MySQLproducts
表中有一个名为 groups 的列,其中产品可以属于。此列中实际存储的是另一个名为groups
.
如果我想选择属于特定组的产品怎么办?
如果一个产品只能属于一个组,我可以简单地使用
where group={groupid}
但是如果一个产品可以属于多个组呢?
我可以像这样存储它们:' 4,8,10,42 ',这些数字中的每一个都表示一个group
id。但是,我将如何查询选择?
您不应将产品列表存储在单个字段中。而不是 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`
如果您希望产品具有多个组,则必须在此处查看数据库结构,您必须创建产品和组连接到的第三个表。然后您所要做的就是将产品ID映射到组ID
如果产品仅属于一个组,则该表中将只有一个条目,但如果它属于多个组,则它将(最终)具有多个条目
我可以像这样存储它们:'4,8,10,42',
不,请不要那样做!
有一个完全众所周知的、标准的、高效且经过良好测试的最佳实践来创建多对多关系,称为连接表。以下是如何使用连接表表示产品 1 是组 4、8、10 和 42 的成员:
product_group
product group
1 4
1 8
1 10
1 42