搜尋

首頁  >  問答  >  主體

php - 關於商品無限極分類Mysql表設計

目前有三張表, 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查詢會經常查詢錯誤。 所以想問下這種情況該怎麼處理

黄舟黄舟2758 天前674

全部回覆(6)我來回復

  • 大家讲道理

    大家讲道理2017-05-16 12:04:51

    用like並不是一個好的選擇,推薦一個Mysql函數find_in_set應該可以解決樓主需求。官方文件:https://dev.mysql.com/doc/ref...

    回覆
    0
  • PHP中文网

    PHP中文网2017-05-16 12:04:51

    也可以考慮用預存程序遞歸實現,不過不建議這麼做,無限級分類本身就不是一種良好的使用者體驗設計,更何況會增大伺服器和資料庫壓力。

    回覆
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-16 12:04:51

    先用like查出部分數據,再循環in_array()過濾,要不要改表結構吧

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-05-16 12:04:51

    你這個已經明顯是個多對多的關係了。
    所以我感覺,你還是保留三張表比較好。
    這樣比較符合範式。

    回覆
    0
  • 淡淡烟草味

    淡淡烟草味2017-05-16 12:04:51

    符合範式應該更合理,如果你硬要按原來想法的話,在每個分類Id前後加上分隔符,用like匹配時加上分隔符就可以了

    回覆
    0
  • PHPz

    PHPz2017-05-16 12:04:51

    你在使用like的時候 例如有這樣一個值 1,2,11 like 1 會like到 1和11
    這種情況請使用find_in_set

    如果你非要使用like,字段值 可以這樣 ,1,2,11, 你like的時候 like ,1, 也可以達到目的

    回覆
    0
  • 取消回覆