皱建大哥以及各位大虾,一个想个半个月都没有解决的搜索的问题,帮忙解决下。
手机表有个字段F表示可能拥有的高级功能: 
 1,触摸屏       
 2,FM收音       
 3,MP3播放       
 4,视频播放       
 5,视频拍摄       
 6,GPS功能       
 7,A2DP蓝牙立体声       
 8,电子词典 
 …………   
 手机甲有功能1,2,3,5,6, 
 手机乙有功能2,3,4,5,7,8 
 手机丙有功能2,3,5,6,7   
 我是这样存在数据库里面的 
 甲.F= "1,1,1,0,1,1,0,0 " 
 乙.F= "0,1,1,1,1,0,1,1 " 
 丙.F= "0,1,1,0,1,1,1,0 " 
 就是如果有对应的功能就是1,没有就是0   
 现在我要搜索所有含有功能3或者7, 
 注意,这里是   或 
 我的意思是只要改手机含功能3,或者含功能7的都属于匹配的结果 
 sql:   select   *   from   table    
                where    
             ((F   like    '_,_,3,_,_,_,_,_, ')   or   (F   like    '_,_,_,_,_,_,7,_, '))     
 问题出来了,   这里用户只勾选了功能3和功能7,我用可以用一个or表示出来 
 但是如果用户勾选了10个功能或者50个功能,我不可能用50个or吧 
 想了很长时间,不知道怎么觉得 
 也许根本就是我这中存取数据的方式就是错误的 
 望各位大虾赐教 
 怎么样才能高效的达到这种搜索的目的~     
------解决方案--------------------修改一下存储的方式: 
 甲.F= "1,2,3,5,6 " 
 乙.F= "2,3,4,5,7,8 " 
 丙.F= "2,3,5,6,7 "   
 ------------------------- 
 declare @t table(id int,code varchar(4),func varchar(20)) 
 insert into @t select 1, '甲 ', '1,2,3,5,6 ' 
 insert into @t select 1, '乙 ', '2,3,4,5,7,8 ' 
 insert into @t select 1, '丙 ', '2,3,5,6,7 '   
 select 
     distinct a.* 
 from 
     @t a, 
     (select  '3 ' as func union select  '7 ') b 
 where 
     charindex( ', '+b.func+ ', ' ,  ', '+a.func+ ', ')> 0   
 /* 
 id          code func                  
 ----------- ---- --------------------  
 1           丙    2,3,5,6,7 
 1           甲    1,2,3,5,6 
 1           乙    2,3,4,5,7,8 
 */
------解决方案--------------------建议调整表设计, 而不是在查询上做文章, 否则数据量一大, 你的服务器就撑不了   
 功能表(功能id, 功能名称) 
 产品表(产品id, 产品名称) 
 产品功能表(功能id, 产品id)   
 查询的时候, 只需要用类似这样的查询: 
 select * from 产品表 a 
 where exists( 
     select * from 产品功能表  
     where 功能id in(3, 7) 
         and 产品id = a.产品id)     
 如果要根据功能名称来查, 只需要再关联功能表即可