在开发过程中,经常会碰到多个属性值存储到一个字段中。这时候查询会麻烦一点,例如下面这样:
SELECT * FROM `#__product` WHERE `quality` LIKE '%,".$qid.",%' OR `quality` LIKE '".$qid.",%' OR `quality` LIKE '%,".$qid."' OR `quality` = '".$qid."'
like 效率可想而知。
现在通过两步来实现优化:
1、优化存储字符
存储时,所有字符串前后均加: “,”。即:
原来存储的数据存储形式:
1,11,22,33,4,9
修改后的数据存储形式:
,1,11,22,33,4,9,
2、优化查询方法:使用 locate
SELECT * FROM `bx_product` WHERE LOCATE(',11,',`column`)>0
查询结果为: column 字段中包含 ,11, 的列表
如果存储形式不能修改,则可使用:
SELECT * FROM `bx_product` WHERE LOCATE(',1,',concat(',',`column`,','))>0