表`data`内有一個列`cate`(text類型),例如:
`data`
`name`  `cate`
aaa  1;3;12
bbb  1;5;7;23
ccc  9;11;3;12現有一個字符串:$chr="2;3;15"; 那麽$chr可以拆分爲:2和3和15。(這一步可以用php做)現在我要找到數據表`data`内`cate`列要含有2或3或15的所有資料。即aaa 和ccc請問用mysql語句應該怎樣寫?不要嵌套,mysql4不支持。

解决方案 »

  1.   

    这个表的设计就很不好。你应该在name-cate之间建立一个1-1关系。然后象你的检索要求就可以用一个sql语句完成了。很多SQL问题,实际上都是表结构极不合理造成的。3NF啊,3NF啊!
      

  2.   

    text字段 太恐怖了
    不过还是可以写的select * from data where (instr(concat(';','2',';'),concat(';',cate,';')) or instr(concat(';','3',';'),concat(';',cate,';')) or instr(concat(';','15',';'),concat(';',cate,';')))  就是效率低点 肯定能出结果 呵呵
      

  3.   

    http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/01/4141864.aspx
    REGEXP 正则的实现两个字符串组的匹配。 select * from `data`
    where concat(';',`cate`,';') regexp
      concat(';(',replace('2;3;15',';','|'),');');
      

  4.   

    确定麻烦,试下这句吧。select * from `data` where `cate` regexp '.*(2|3|15).*';
      

  5.   


    呵呵,再問一下,如果是求全部包含 是不是應該改成:
    SQL codeselect*from`data`whereconcat(';',`cate`,';') regexp
      concat(';(',replace('2;3;15',';','&'),');');