例如,有一张表
| uid | uname | hobby |  
+-----+-------+---------------------------------+  
| 1 | AAAA | 音乐,电影,网络,篮球,阅读,乒乓球 |  
| 2 | BBBB | 音乐,阅读,乒乓球,发呆,围棋,参禅 |  
| 3 | CCCC | 交友,乒乓球 |  
+-----+-------+---------------------------------+  
有一个 string =‘音乐,发呆’;要在表中找出hobby字段中有音乐和发呆这两项的数据。请问应该怎么做啊,谢谢。还有,请问,比如说我要存储2个爱好,建表时,是建一个hobbys字段,存储‘音乐,发呆’。还是建2个字段hobby1,hobby2.分别存储‘音乐,发呆’。哪一个有利于以后的查询以及写入。网站使用PHP编的。

解决方案 »

  1.   

    假设满足1个条件(音乐 or 发呆)即可
    select * from tt where repalce(hobby,'|') regexp '音乐|发呆'还有,请问,比如说我要存储2个爱好,建表时,是建一个hobbys字段,存储‘音乐,发呆’。还是建2个字段hobby1,hobby2.分别存储‘音乐,发呆’uid | uname | hobby |
    1    a       音乐
    1    a       发呆  
    or
    uid | uname | hobbyid |
    1     a      1
    1     a      2hobby:
    hobbyid hobbymame
    1         音乐
    2         发呆
      

  2.   

    select * from 有一张表 where hobby regexp '音乐|发呆';
    select * from 有一张表 where hobby regexp replace('音乐,发呆',',','|');参考下贴中的例子。
    http://blog.csdn.net/acmain_chm/article/details/4141864
      

  3.   

    额,我需要的数据hobby字段必须同时包括‘音乐,发呆’这两个爱好。所以应该不是“replace('音乐,发呆',',','|'”吧?请问该怎么做啊
      

  4.   

    MYSQL 的REGEXP只直接简单的正则。 无法实现AND的运算。
    只能用普通的 hobby  like '%音乐%' and hobby  like '%发呆%'