最近做一个项目,商品分类的属性,有30多个属性值,编辑的时候,是把所选属性的int值整合成一个字符串,写进数据库。。这样前台查询的时候,选择属性,和数据库的属性字符串进行匹配
这应该是mysql常用而且比较恼火的问题,很久之前遇到过,因为相对查询不多,所以没有深入研究,最近这个项目这方面的搜索量非常大。。所以上来求大神赐教。。
网上多数人说用 match against全文索引方法,肯定比like查询快,但这种是不是效率最高的???MySQL模糊查询最佳索引

解决方案 »

  1.   

    全文检索肯定比like查询快
    但 mysql 的全文检索并不支持中文,需要安装第三方软件你把 所选属性的int值整合成一个字符串 ,那么你是如何能查询的到的?
      

  2.   

    结合 find_in_set 和 substring_index 两个函数就可以了
    当然属性串样组织成这样:
    属性1,值1,属性2,值2,属性3,值3,属性4,值4,属性5,值5,.....
      

  3.   

    这2个函数的效率怎么样啊,除了这2个函数,额外还有其他5-8个查询条件。。上万条记录,cpu撑得住吗???
      

  4.   

    先不要奢谈效率,结果还没有出来呢,哪来的效率?你先在 mysql 管理器中执行下面的查询,体会一下函数的用法select substring_index(substring_index(n,',',find_in_set('属性2', n)),',',-1)
    from (select '属性1,值1,属性2,值2,属性3,值3,属性4,值4,属性5,值5' as n) t
      

  5.   

    其实象这种需求应考虑按位与方式写值,而不应合成字符串写入
    1:属性1
    2:属性2
    4:属性3
    8:属性4
    ......
    属性1+属性3=>1+4=5 ,数据库写入整型值5(5&1)== 1 -->包含属性1
    数据库操作也差不多:where (options & 1)=1