在我的MySQL products
表中,有一个名为groups的列,产品可以属于。此列中实际存储的是另一个名为groups
的表格的ID。
如果我想选择属于特定群组的产品怎么办?
如果产品只能属于一个组,我可以简单地使用
where group={groupid}
但是,如果产品可以属于多个群体怎么办?
我可以像这样存储它们:' 4,8,10,42 ',这些数字中的每一个都代表group
个ID。
但那我该如何查询选择?
答案 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