php - 关于商品无限极分类Mysql表设计
黄舟
黄舟 2017-05-16 12:02:51
0
6
624

目前有三张表, 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查询会经常查询错误。 所以想问下这种情况应该怎么处理

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全員に返信 (6)
大家讲道理

like の使用は良い選択ではありません。元の投稿者のニーズを解決できる Mysql 関数 find_in_set をお勧めします。公式ドキュメント: https://dev.mysql.com/doc/ref...

いいねを押す+0
    洪涛

    再帰的な実装にストアド プロシージャの使用を検討することもできますが、サーバーとデータベースへの負荷が増大することは言うまでもなく、無限分類自体が優れたユーザー エクスペリエンス設計ではありません。

    いいねを押す+0
      曾经蜡笔没有小新

      最初に like を使用してデータの一部を見つけ、次に in_array() をループしてフィルターするか、テーブル構造を変更します

      いいねを押す+0
        伊谢尔伦

        あなたの関係は明らかに多対多の関係です。
        ですので、テーブルは3つ確保しておいた方が良いと思います。
        これはよりパラダイムに沿ったものです。

        いいねを押す+0
          淡淡烟草味

          本来の考え方にこだわるなら、各カテゴリIDの前後に区切り文字を追加し、likeと一致させる場合は区切り文字を追加する方が合理的です

          いいねを押す+0
            PHPzhong

            likeを使う場合、例えば1,2,11という値があった場合、like 1は1と11をlikeします
            この場合はfind_in_setを使ってください

            like を使用する場合は、フィールド値を 1,2,11 のようにすることもできます。1 のようにすることも目的を達成できます。

            いいねを押す+0
              最新のダウンロード
              詳細>
              ウェブエフェクト
              公式サイト
              サイト素材
              フロントエンドテンプレート
              私たちについて 免責事項 Sitemap
              PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!