MySQL正则表达式搜索JSON数组
我正在将json数据存储到表中的一个字段中,在使用REGEXP返回正确的条目时遇到问题 基本上,它与JSON对象中的其他属性相匹配,这是不应该的 示例JSONMySQL正则表达式搜索JSON数组,mysql,regex,Mysql,Regex,我正在将json数据存储到表中的一个字段中,在使用REGEXP返回正确的条目时遇到问题 基本上,它与JSON对象中的其他属性相匹配,这是不应该的 示例JSON { "data": { "en": { "containers": [ { "id": 1441530944931, "template": "12", "columns": { "column1": [
{
"data": {
"en": {
"containers": [
{
"id": 1441530944931,
"template": "12",
"columns": {
"column1": [
"144",
"145",
"148"
],
"column2":[
"135",
"148",
"234"
]
}
}
],
"left": "152",
"right": "151"
},
}
}
现在,我想根据一个特定的值(即148)搜索columns数组
现在我有下面的问题
WHERE (w.`_attrs` REGEXP '"column[0-9]":.*\\[.*"148".*\\]'
这很好用
但是,如果我将值从148更改为152或151,它也可以工作
出于某种原因,查询也匹配属性left和right,但这是不可取的
有什么帮助吗
谢谢或者。。。切换到MariaDB 10并为JSON的组件编制索引。您的意思是,根据给定的样本数据,如果您在
152
上进行匹配,它将返回正值?正确。它也将匹配151。基本上,它将匹配任何键,该键的值用“”括起来,就好像它完全跳过了“列[0-9]”:。部分您的通配符*
需要显式排除方括号,例如[^\\[]*
。但我忍不住觉得您在这里做出了一些糟糕的设计决策,因为这个过滤器不适合使用……如果您要使用关系数据库,为什么不存储关系数据(即,将此JSON标准化!);否则,文档存储(NoSQL)数据库可能更合适?@Thomas:这只会让它听起来更不适合RDBMS。看看一些基于文档的NoSQL数据库(例如MongoDB)是如何处理JSON的。整个内容将被索引并易于搜索,而不依赖于易出错(而且速度非常慢)基于模式的字符串匹配。