我有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变体都不起作用。
由于
答案 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()预处理列表,然后将它放入数组中。