sql语句,怎么构造??

土豆吧 2012-11-02 09:27:00
数据库中有一字段,teams,
teams
1:{1523}{2692}{1894}
2: {123}
3:{123}{741}

要查找在{123}{789}{456}的记录,
比如说2中有{123},3中也有{123},则2和3都是符合的记录,

能明白我的意思吗?
...全文
229 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
ACMAIN_CHM 2012-11-06
  • 打赏
  • 举报
回复
引用 14 楼 fxxyaya 的回复:
不好意思,我搞错了,我那个方法只能找出teams里单个的记录,可以不用去括号,用这种应该行 '\\{123\\}|\\{456\\}'
正则表达式的问题,楼主这样就可以不必要去用REPLACE替换反而影响效率。 ',(123|456),' 这个和你的题间不符了,这个 123 或 456 之前必须有逗号才能匹配。 regexp '\\{123\\}|\\{456\\}' 是正确解法。
土豆吧 2012-11-06
  • 打赏
  • 举报
回复
implode 没写完整..
土豆吧 2012-11-06
  • 打赏
  • 举报
回复
引用 15 楼 ACMAIN_CHM 的回复:
引用 14 楼 fxxyaya 的回复:不好意思,我搞错了,我那个方法只能找出teams里单个的记录,可以不用去括号,用这种应该行 '\\{123\\}|\\{456\\}'正则表达式的问题,楼主这样就可以不必要去用REPLACE替换反而影响效率。 ',(123|456),' 这个和你的题间不符了,这个 123 或 456 之前必须有逗号才能匹配。 regex……
regexp '\\{123\\}|\\{456\\}',,这个123,456 是数组里的元素,$arr=array(123,456), 是不是得$str=implode('\\}|\\{',); 然后regex concat('\\',$str,'\\}') 啊>
fxxyaya 2012-11-05
  • 打赏
  • 举报
回复
不好意思,我搞错了,我那个方法只能找出teams里单个的记录,可以不用去括号,用这种应该行 '\\{123\\}|\\{456\\}'
olkldksl11 2012-11-02
  • 打赏
  • 举报
回复
select teams from team where teams like '%{123}%' or teams like '%{789}%' or teams like '%{456}%';
WWWWA 2012-11-02
  • 打赏
  • 举报
回复
一样的,


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


mysdzlt2007 2012-11-02
  • 打赏
  • 举报
回复
如果包括括号的话
SELECT * 
FROM `tablename`
WHERE teams REGEXP CONCAT('(',REPLACE(REPLACE(REPLACE('{123}{789}{456}','{','\\{'),'}','\\}'),'\\}\\{','\\}|\\{'),')');
土豆吧 2012-11-02
  • 打赏
  • 举报
回复
我描述错了,, 想要的是
teams
1 {789}
2 {123}{456}{789}
3 {123}{456}
4 {123}

然后查找teams中含有{123}{456}其中一个的就行,

比如2 和 3中 都含有{123}{456},满足,

4含有{123},也满足,

这怎么构造啊???
WWWWA 2012-11-02
  • 打赏
  • 举报
回复
去掉{}
SELECT '(123 741)' REGEXP '(123|789|456)'
WWWWA 2012-11-02
  • 打赏
  • 举报
回复
是的,刚测试通过
土豆吧 2012-11-02
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

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

这个对,,然后我研究了一下这个,,

发现where
concat(',',
REPLACE(REPLACE(teams,'{',''),'}',','),',') regexp ',(123|456),' 这样也行哦
WWWWA 2012-11-02
  • 打赏
  • 举报
回复
应是执行类似
SELECT ',2650,|,123,' REGEXP ',650,|,980,|,1023,|,4567,|,1564,|,7532,'
这样的SQL语句
土豆吧 2012-11-02
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

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

我试了,但是没有出现结果,,,
fxxyaya 2012-11-02
  • 打赏
  • 举报
回复
额。。。有一个打错了,自己写对即可。。。囧
fxxyaya 2012-11-02
  • 打赏
  • 举报
回复
在查询语句regexp后面的匹配模式中的每一部分,前面加上^号,后面加上$符号,如'^123&|^456$'
WWWWA 2012-11-02
  • 打赏
  • 举报
回复
准确查询
select * from tt where
concat(',',
REPLACE(REPLACE(teams,'{',''),'}',',|,'),',') regexp ',123,|,456,'
土豆吧 2012-11-02
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

一样的,


select * from tt where
REPLACE(REPLACE(teams,'{',''),'}','|') regexp '123|456'
[/Quote]

现在出现了一个问题,不知道能不能解决,比如
teams 有这样的记录:
1: 2650|123
2: 6503|123

他们不符合 650|980|1023|4567|1564|7532,,但是 也会把上面两条记录查找出来,,,

56,679

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧