[英]Query on a list of json in Mysql 5.6
它根本没有效率,但是可以帮助您提出建议:
SELECT *
FROM data
WHERE
(LOCATE('"employmentType":["status":"success"]', policy_status) > 0
AND
LOCATE('"value": 1', policy_status) > 0);
使用LOCATE
函数,您可以查看该字段是否包含所需的appVersion
和value
字符串。 参见sqlfiddle演示 。
其中简单的测试数据 :
CREATE TABLE data (
id INT UNSIGNED NOT NULL,
policy_status TEXT
);
INSERT INTO data (id, policy_status) VALUES
(1,'{"employmentType":["status":"success"], "value": 1}'),
(2,'{"employmentType":["status":"no"], "value": 1}'),
(3,'{"employmentType":["status":"no"], "value": 0}'),
(4,'{"employmentType":["status":"success"], "value": 0}'),
(5,'{"employmentType":["status":"no"], "value": 1}');
给出结果 :
{"employmentType":["status":"success"], "value": 1}
找到两个字符串的地方。
更新 :
另外,如果您可以为policy_status
列添加FULLTEXT
索引,则可以在WHERE
子句中使用全文本搜索:
...
WHERE
MATCH (policy_status) AGAINST ('+"employmentType:[status:success]" +"value: 1"' IN BOOLEAN MODE)
注意AGAINST(...)
的+
和"
字符。它们是特殊的布尔型全文本搜索运算符。 请参见此处 。
前导或尾随加号表示此单词必须出现在返回的每一行中
和
包含在双引号(“)字符中的短语仅与按字面意义包含该短语的行匹配(如键入的那样)。全文引擎将短语拆分成单词,并在FULLTEXT索引中搜索这些单词。非单词字符不需要完全匹配。
如果您不是这种情况,则可以使用LIKE
来匹配子字符串:
...
WHERE
(policy_status LIKE '%"employmentType":["status":"success"]%'
AND
policy_status LIKE '%"value": 1%');
两者均参见sqlfiddle演示 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.