如何在MYSQL中将数字与字段category_id(表productoption)进行比较

时间:2015-07-12 06:44:32

标签: mysql sql

我有3张桌子:

产品

id  name
1   ABC
2   ABCDC
3   ABEFC

分类

id  name
1   Cate 1
2   Cate 2
3   Cate 3

ProductOption

id  product_id  size        category_id
1   1           25,26,27    1,2
2   2           25,26,27    1,2
3   3           25,26,27    3

如何按类别输入选择产品是1 => data product_id结果:1,2

1 个答案:

答案 0 :(得分:0)

您无法使用IN运算符。
原因是IN运算符需要一个值列表,但是您提供的是包含列表的单个值。这是一个常见的错误,我自己做了几次,所以不要为此感到难过。

您应该规范化表格 - 在99.9999999999999%的情况下,在单个列中保留多个值是错误的。
通过规范化我的意思是你应该添加2个表:ProductOptionSizeProductOptionCategory,并将它们用于ProductOptionSize和{{1}之间的多对多关系} tables。

如果由于某种原因无法规范化您的表格,您可以使用Category运算符选择某个类别中的所有商品,例如:

LIKE

注意:我在值之前和之后使用了SELECT p.id, p.name FROM Product p INNER JOIN ProductOption po ON(p.id = po.id) WHERE CONCAT(','m po.category_id, ',') like '%,1,%' ,以确保您只获得类别1的结果,而不是11,123等。另外,我和#39; ve在,的开头和结尾添加了,,以获取值1位于category_id值列表的开头或结尾的结果。