mysql查询查找类别

时间:2012-08-17 13:06:21

标签: php mysql mysqli

我有一个像这样的产品表

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 

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

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

我对处理此问题的查询感到困惑。

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

4 个答案:

答案 0 :(得分:4)

关联表:product-category可以简化您想要的查询。

假设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

答案 1 :(得分: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' 

答案 2 :(得分:2)

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

答案 3 :(得分:1)

SELECT * 
FROM products 
WHERE 
    category LIKE "ID,%" OR 
    category LIKE "%,ID,%" OR 
    category LIKE "%,ID" 

以上查询应该有效 - 小心性能问题,因为其他人建议链接表是唯一的方法。