目前有三张表, 1: goods 商品主表 id name price
2: goods_type 商品类型表 tid name
3: goods_type_map 商品和商品类型关系表 id gid gtid
之前的表结构如上,现由于商品对应类型可以为一对多,一件商品可以对应多个类型,我每次更新商品所属类型时需要现将关系表已存在的内容删除再插入新的类型关系。
goods 表:
id name price goods_type
1 洗面奶 22 1,8
2 面膜 33 11
goods_type表
tid name
1 化妆品
8 护肤品
11 保健品
故想更改为: 在商品主表中增加 goods_type 字段,来取代goods_type_map表,多个类型使用逗号隔开.
但目前出现问题,当查询某个类型的商品时,使用Like查询会经常查询错误。 所以想问下这种情况应该怎么处理
用like并不是一个好的选择,推荐一个Mysql函数find_in_set应该能解决楼主需求。官方文档:https://dev.mysql.com/doc/ref...
也可以考虑用存储过程递归实现,不过不推荐这么做,无限级分类本身就不是一种良好的用户体验设计,更何况会增大服务器和数据库压力。
先用like查出部分数据,再循环in_array()过滤,要不就改表结构吧
你这个已经明显是个多对多的关系了。
所以我感觉,你还是保留三张表比较好。
这样比较符合范式。
符合范式应该更加合理,如果你硬要按原来想法的话,在每个分类Id前后加上分隔符,用like匹配时加上分隔符就可以了
你在使用like的时候 比如有这样一个值 1,2,11 like 1 会like到 1和11
这种情况请使用find_in_set
如果你非要使用like,字段值 可以这样 ,1,2,11, 你like的时候 like ,1, 也可以达到目的