目前有三張表, 1: goods 商品主表 id name price
2: goods_type 商品類型表 tid name
3: goods_type_map 商品和商品類型關(guān)系表 id gid gtid
之前的表結(jié)構(gòu)如上,現(xiàn)在由於商品對應(yīng)類型可以為一對多,一件商品可以對應(yīng)多個類型,我每次更新商品所屬類型時需要現(xiàn)將關(guān)係表已存在的內(nèi)容刪除再插入新的類型關(guān)係。
goods 表:
id name price goods_type
1 洗面奶 22 1,8
2 面膜 33 11
goods_type表
tid name
1 化妝品
8 護(hù)膚品
11 保健品
故想更改為: 在商品主表中增加 goods_type 字段,來取代goods_type_map表,多個類型使用逗號隔開.
但目前出現(xiàn)問題,當(dāng)查詢某個類型的商品時,使用Like查詢會經(jīng)常查詢錯誤。 所以想問下這種情況該怎麼處理
人生最曼妙的風(fēng)景,竟是內(nèi)心的淡定與從容!
用like並不是一個好的選擇,推薦一個Mysql函數(shù)find_in_set應(yīng)該可以解決樓主需求。官方文件:https://dev.mysql.com/doc/ref...
也可以考慮用預(yù)存程序遞歸實現(xiàn),不過不建議這麼做,無限級分類本身就不是一種良好的使用者體驗設(shè)計,更何況會增大伺服器和資料庫壓力。
先用like查出部分?jǐn)?shù)據(jù),再循環(huán)in_array()過濾,要不要改表結(jié)構(gòu)吧
你這個已經(jīng)明顯是個多對多的關(guān)係了。
所以我感覺,你還是保留三張表比較好。
這樣比較符合範(fàn)式。
符合範(fàn)式應(yīng)該更合理,如果你硬要按原來想法的話,在每個分類Id前後加上分隔符,用like匹配時加上分隔符就可以了
你在使用like的時候 例如有這樣一個值 1,2,11 like 1 會like到 1和11
這種情況請使用find_in_set
如果你非要使用like,字段值 可以這樣 ,1,2,11, 你like的時候 like ,1, 也可以達(dá)到目的