我的一相类似的问题是这样搞的,希望对你有帮助
就是:
hobbyid 是varchar型的
他的爱好内容为:1,2,4,......
既喜欢打篮球,又喜欢打排球的人是:
select * from guesthobby where hobbyid like '%1%' and hobbid like '%2%'
select * from guesthobby where hobbyid like '%1%' or hobbid like '%2%' 是或者的关系,既喜欢打篮球或者喜欢打排球的人出来了
查询效率如何没去研究,所用的数据库为PostgreSQL或MS SQL Server ,不是MySQL

解决方案 »

  1.   

    呵呵,你为什么不使用  SET  列类型呢??????
      

  2.   

    http://shuixin13.jahee.com/gb2312/mysql/06-2.html#SET
      

  3.   

    呵呵,多谢,SET好像不错,不过对set里面进行复杂的AND OR 查询的时候,效率如何,还有set 列如何计算存储空间的?多谢了。
      

  4.   

    sunthing 您的建议不错哦,但是我觉的如果有很多hobby的时候,不知道效率如何
      

  5.   

    链接都给你了,为什么不看一看呢??它是以 bit 位做比较的,
    效率很高,一个 SET 最大可以有 64 个不同的成员。 从 3.23.51 开始,当表被创建时,SET 值尾部的空格将被自动地删除。 MySQL 以数字值存储 SET 值,以被存储值的低阶比特位(bit)对应于第一个集合成员。如果在一个数字语境中检索一个 SET 值,检索的值把比特位设置为对应组成列值的集合成员。例如,你可以使用下面所示的示例从一个 SET 列中检索出一个数字: mysql> SELECT set_col+0 FROM tbl_name;如果将一个数字存储到一个 SET 列中,被设置的数字的二进制表示法的比特位决定列值中的集合成员。假设一个列被定义为 SET("a","b","c","d")。那么它的成员有下面所示的比特值: SET 成员  十进制值  二进制值  
    a  1  0001  
    b  2  0010  
    c  4  0100  
    d  8  1000  如果将值 9(二进制的 1001) 赋给这个列,那么 SET 值的第一个和第四个成员 "a" 和 "d" 被选择,结果值为 "a,d"。 
      

  6.   

    上面这段话我看了不是很明白,看了英文的原文,也不是很明白
         2、SELECT set_col+0 FROM tbl_name;这句话是什么意思啊?column+0是什么意思?
       3、对于set类型的表,插入数据的时候应该怎么插入??
       
      

  7.   

    SET 列其实是以一个数字形式保存在数据表中的,为了将它显示成一个数字,可以使用上面的 SQL 语句