【问题标题】:MySql REGEXP to match two comma separated stringsMySql REGEXP 匹配两个逗号分隔的字符串
【发布时间】:2013-05-20 18:40:45
【问题描述】:

我有一个包含以下值的表:

id    |    value      |
-----------------------
1     | 1,2,5,8,12,20 |    
2     | 11,25,26,28   |    
-----------------------

现在我想搜索一些逗号分隔的 ID,例如来自上述值列的“1,3,6,7,11”,例如

SELECT id FROM tbl_name  
WHERE value REGEXP '*some reg exp goes here containing 1,3,6,7,11*'
LIMIT 1,0;

SELECT id FROM tbl_name  
WHERE value REGEXP '*some reg exp goes here containing 3,6,27,15*'
LIMIT 1,0;

第一个查询应该返回 1 而第二个应该返回 NULL

我是正则表达式的新手,谁能帮忙。谢谢

【问题讨论】:

  • 只是为了确保我理解,它应该返回1,因为至少有一个数字与具有该 ID 的行匹配?
  • 顺便说一句,不要指望使用这种数据格式的查询会有好的性能,它将无法使用任何形式的索引,并且总是需要读取整个表来回答问题。换句话说,如果有超过几百行数据,对于实时渲染网页是没有好处的。
  • 不应该是该行的 id,是的,如果至少有一个数字匹配,则返回。
  • 数字是按数字顺序存储的,搜索词中的数字也是按数字顺序存储的吗?

标签: mysql regex


【解决方案1】:
REGEXP '(^|,)(1|3|6|7|11)(,|$)'

将匹配包含序列1,3,6,7,11 的一个数字的所有值。

您不应使用一列来保存多个值。规范化数据!

修改答案

【讨论】:

  • 感谢@Michel,但如果提供的字符串中的任何数字(至少一个)与值匹配,我想匹配,就像我的问题 1 匹配第一个字符串和值一样。
  • 更新了答案。这些值代表什么?随着值长度和表大小的增加,此查询将花费更多时间。如果您愿意,我可以帮助您进行标准化
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-04
相关资源
最近更新 更多