目前有三张表, 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をlikeします
この場合はfind_in_setを使ってください
like を使用する場合は、フィールド値を 1,2,11 のようにすることもできます。1 のようにすることも目的を達成できます。