数据库中有一字段,teams, 
      teams
1:{1523}{2692}{1894} 
2: {123}
3:{123}{741}要查找在{123}{789}{456}的记录, 
比如说2中有{123},3中也有{123},则2和3都是符合的记录,能明白我的意思吗?

解决方案 »

  1.   

    去掉{}
    SELECT '(123 741)' REGEXP '(123|789|456)'
      

  2.   

    我描述错了,, 想要的是
      teams
    1 {789}
    2 {123}{456}{789}
    3 {123}{456}
    4 {123}
     
    然后查找teams中含有{123}{456}其中一个的就行,比如2 和 3中 都含有{123}{456},满足,4含有{123},也满足,这怎么构造啊???
      

  3.   

    如果包括括号的话SELECT * 
    FROM `tablename` 
    WHERE teams REGEXP CONCAT('(',REPLACE(REPLACE(REPLACE('{123}{789}{456}','{','\\{'),'}','\\}'),'\\}\\{','\\}|\\{'),')');
      

  4.   

    一样的,
    select * from tt where 
    REPLACE(REPLACE(teams,'{',''),'}','|') regexp '123|456'
      

  5.   

    select teams from team where teams like '%{123}%' or teams like '%{789}%' or teams like '%{456}%';
      

  6.   


    现在出现了一个问题,不知道能不能解决,比如
    teams 有这样的记录: 
    1: 2650|123
    2: 6503|123他们不符合 650|980|1023|4567|1564|7532,,但是 也会把上面两条记录查找出来,,,
      

  7.   

     准确查询
    select * from tt where  
    concat(',',
    REPLACE(REPLACE(teams,'{',''),'}',',|,'),',') regexp ',123,|,456,'
      

  8.   

    在查询语句regexp后面的匹配模式中的每一部分,前面加上^号,后面加上$符号,如'^123&|^456$'
      

  9.   

    应是执行类似
    SELECT ',2650,|,123,' REGEXP ',650,|,980,|,1023,|,4567,|,1564,|,7532,'
    这样的SQL语句
      

  10.   


    这个对,,然后我研究了一下这个,,发现where  
    concat(',',
    REPLACE(REPLACE(teams,'{',''),'}',','),',') regexp ',(123|456),'  这样也行哦
      

  11.   

    不好意思,我搞错了,我那个方法只能找出teams里单个的记录,可以不用去括号,用这种应该行
    '\\{123\\}|\\{456\\}'
      

  12.   

    正则表达式的问题,楼主这样就可以不必要去用REPLACE替换反而影响效率。 ',(123|456),'   这个和你的题间不符了,这个 123 或 456 之前必须有逗号才能匹配。regexp '\\{123\\}|\\{456\\}' 是正确解法。
      

  13.   


    regexp '\\{123\\}|\\{456\\}',,这个123,456 是数组里的元素,$arr=array(123,456), 是不是得$str=implode('\\}|\\{',); 然后regex concat('\\',$str,'\\}')   啊>