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

目前有三张表, 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
伊谢尔伦

你这个已经明显是个多对多的关系了。
所以我感觉,你还是保留三张表比较好。
这样比较符合范式。

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

符合范式应该更加合理,如果你硬要按原来想法的话,在每个分类Id前后加上分隔符,用like匹配时加上分隔符就可以了

いいねを押す +0
PHPzhong

你在使用like的时候 比如有这样一个值 1,2,11 like 1 会like到 1和11
这种情况请使用find_in_set

如果你非要使用like,字段值 可以这样 ,1,2,11, 你like的时候 like ,1, 也可以达到目的

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