我有一个像这样的产品表
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。
现在我想显示属于特定类别的所有产品。
我对处理此问题的查询感到困惑。
这是保存此类数据的正确格式吗? 请建议
答案 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"
以上查询应该有效 - 小心性能问题,因为其他人建议链接表是唯一的方法。