目前有三张表, 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()를 반복하여 필터링하거나 테이블 구조를 변경합니다
당신의 관계는 분명히 다대다 관계입니다.
그래서 테이블은 3개 정도 두시는 게 좋을 것 같아요.
이것은 패러다임에 더 부합합니다.
본래의 아이디어를 고집한다면 각 카테고리 ID 전후에 구분자를 추가하고, like와 일치할 때는 구분자를 추가하는 것이 더 합리적이어야 합니다.
like를 사용할 때 예를 들어 1,2,11과 같은 값이 있으면 like 1은 1과 11을 좋아할 것입니다.
이 경우 find_in_set을 사용하세요
like를 사용하려고 하면 필드 값은 1,2,11이 될 수 있습니다. like ,1도 목적을 달성할 수 있습니다.