0

我有一个这样的产品表

id   |   name   | category 
--------------------------
1    |   name1  |  2,1,5,8,9
2    |   name2  |  2,1
3    |   name3  |  5,8

我有一个像这样的类别表

id   |   catname   
----------------
1    |   cat_name1  
2    |   cat_name2  
5    |   cat_name3 
8    |   cat_name3 
9    |   cat_name3 

每个产品可以有多个类别。与该产品关联的类别在产品表中名为“类别”的行中保存为“1,5,8,7”,其中每个代表类别表的 id。

现在我想显示特定类别下的所有产品。

我对处理这个问题的查询有点困惑。

这是保存此类数据的正确格式吗?请指教

4

4 回答 4

4

关联表:产品类别将简化您想要的查询。

假设 ProductCategory 表包含列(prod_id、cat_id),您的查询(基于类别名称)将是:

  SELECT p.name FROM products p,product_category pc ,category c
  WHERE c.name='your_categ' 
  AND c.id = pc.categ_id
  AND p.id = pc.prod_id
于 2012-08-17T13:12:37.207 回答
3

我会为产品类别映射添加一个额外的表。

SELECT p.name 
 FROM products p 
   JOIN product_category pc ON  p.id=pc.prod_id 
   JOIN Category c ON c.id = pc.categ_id
 WHERE c.name='Category' 
于 2012-08-17T13:08:14.190 回答
2

不,这不是存储产品类别的正确方法,表格未根据 3NF 进行规范化。由于一个产品可以属于许多类别并且一个类别被分配给许多产品,因此您必须有一个 M:N(多对多)表,例如。products_categories(prod_id, categ_id)而是搜索此表。

于 2012-08-17T13:10:24.180 回答
1
SELECT * 
FROM products 
WHERE 
    category LIKE "ID,%" OR 
    category LIKE "%,ID,%" OR 
    category LIKE "%,ID" 

上面的查询应该可以工作 - 注意性能问题,因为其他人建议链接表是唯一的方法。

于 2012-08-17T13:19:50.603 回答