如何只找到mysql中一部分字符串的完全匹配?

时间:2014-04-23 19:42:52

标签: mysql

我有2个名为“main_cat”和“sub_cat”的表

子类别可以属于多个主要类别,存储在名为“cat_id”的VARCHAR中,只用逗号“1,8,17”等分隔。

如何根据属于的主要类别选择子类别?

我试过了

SELECT * FROM sub_cat WHERE cat_id LIKE '%{$catId}%'

但是有一个$ catId的“1”也会返回“10,21,14”等。

我尝试的任何其他LIKE变体都不起作用。

由于

2 个答案:

答案 0 :(得分:1)

您可以使用FIND_IN_SET,但如果可能,您可以更改架构,然后将其规范化,不要存储逗号分隔的ID。

SELECT * FROM sub_cat 
WHERE FIND_IN_SET('{$catId}',cat_id )

针对子类别(id,name)的类别(id,name)1的架构1表和关于子类别与其多父父级关联的联结表(id,category_id,sub_category_id)的建议。然后你可以使用像

这样的联合查询
SELECT s.* 
FROM sub_categories s
JOIN junction_table j ON(s.id =j.sub_category_id)
WHERE j.category_id ='{$catId}'

答案 1 :(得分:0)

如果你想要完全匹配,不要使用通配符:)你可能必须先使用explode()预处理列表,然后将它放入数组中。