用通配符_选了哪个就组成一个5位长的字符串。
比如选了看电视,则看电视这个的value="1____",然后将这些字符串到数据库里去like。
select * from table where field like value
如果是上面的value='1____',就是查找字段以1开头的那些。
其实mysql可以写自定义函数应该更简单。

解决方案 »

  1.   

    用通配符_选了哪个就组成一个5位长的字符串。
    比如选了看电视,则看电视这个的value="1____",然后将这些字符串到数据库里去like。
    select * from table where field like value
    如果是上面的value='1____',就是查找字段以1开头的那些。
    其实mysql可以写自定义函数应该更简单。------------------------------It's a good idea.
      

  2.   

    $a = bindec('11001');
    $b = bindec('01011');
    $c = $a & $b;
    echo decbin($c);
      

  3.   

    相应的数据库应存储int类型的字段值楼主的意思应该是找出有相同爱好的用户吧
    假设欲比较的值为11001
    $a = bindec('11001');
    select * from user where horbby & $a > 0;
      

  4.   

    谢谢楼上的各位,大家提供的两类方法我基本上清楚了,真的谢谢。可我现在用户的爱好字段,因为爱好是很多的,所以在数据库中是以varchar字段存储,现在长度就是28位,(1和0构成28位长)如果用二进制的方法,就不能正常判断了。我想了一下大概只有两种方法
    1,第一种就是在MySQL里面建立个自定义函数,能将爱好字段内的数据转成二进制,然后再去位运算
    2,第二种大概就只能将数据取出,在PHP里面转换,然后再判断位运算结果。是不是这样的,真的不知道该怎么样做了,谢谢大家
      

  5.   

    建一个set字段sets,
    sets的值为 'football','soccer','basketball','tennis','fishing','hiking'.....等这样的方式选择出 如果有一项以上爱好是符合的, 
    设你外面生成的二进制字符串为$str='110001'SELECT *  from a1  where sets & b'110001' >0 即可
      

  6.   

    用varchar字段也差不多,假设字段名为f  select * from a1 where f & b'110001'>0
      

  7.   

    不过这样的库结构,因为都无法使用索引,在大数据量的情况下,速度肯定是不理想的,可以考虑使用一个爱好对应表,每项爱好分为记录存放,可以建立索引,缺点是这个表的数据量会比较大,对应的sql语句也会比较长
    id  userid  interests  (这里可以用代码)
     1    1     football
     2    1     tennis
     3    2     boxing
     4    2     makelove
      

  8.   

    Top  
     ice_berg16(寻梦的稻草人) ( ) 信誉:125    Blog  2006-10-26 21:26:32  得分: 0  
      
       
    相应的数据库应存储int类型的字段值楼主的意思应该是找出有相同爱好的用户吧
    假设欲比较的值为11001
    $a = bindec('11001');
    select * from user where horbby & $a > 0;这个方法好,又学了一招
    (ps:hobby拼错了...)