Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Mysql 5.6中查询json列表_Mysql_Json - Fatal编程技术网

在Mysql 5.6中查询json列表

在Mysql 5.6中查询json列表,mysql,json,Mysql,Json,我使用的是mysql 5.6,升级到5.7对我来说是不可行的。我有一个将json存储为属性的表。附加屏幕截图以供参考 这里,policy_status列包含不同策略的状态和值,如每个用户的json。 我如何才能找到用户列表,比如说,appVersion的状态为success,值=1437。 我在网上得到了一些参考资料,但由于我对存储过程不熟悉,所以无法找到解决方案。我将感谢任何帮助。提前谢谢 它一点也不高效,但可能会帮助你提出一些想法: SELECT * FROM data WHERE (

我使用的是mysql 5.6,升级到5.7对我来说是不可行的。我有一个将json存储为属性的表。附加屏幕截图以供参考

这里,policy_status列包含不同策略的状态和值,如每个用户的json。 我如何才能找到用户列表,比如说,appVersion的状态为success,值=1437。
我在网上得到了一些参考资料,但由于我对存储过程不熟悉,所以无法找到解决方案。我将感谢任何帮助。提前谢谢

它一点也不高效,但可能会帮助你提出一些想法:

SELECT *
FROM data
WHERE
  (LOCATE('"employmentType":["status":"success"]', policy_status) > 0
   AND
   LOCATE('"value": 1', policy_status) > 0);
使用
LOCATE
功能,您可以查看该字段是否包含所需的
appVersion
value
字符串。请参见此处的

其中简单测试数据

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}
给出结果

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}
找到两个字符串的位置

更新

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\u status
列添加
FULLTEXT
索引,则可以在
WHERE
子句中使用全文搜索:

...
WHERE
   MATCH (policy_status) AGAINST ('+"employmentType:[status:success]" +"value: 1"' IN BOOLEAN MODE)
请注意(…)中的
+
字符。它们是特殊的布尔全文搜索运算符。

前导或尾随加号表示该单词必须为 在返回的每一行中显示

包含双引号(“)字符的短语匹配 仅限按字面意思包含短语的行,因为它是键入的。这个 全文引擎将短语拆分为单词并在中执行搜索 单词的全文索引。非单词字符不必为空 完全匹配

如果在您的情况下不是一个选项,您可以使用
LIKE
来匹配子字符串:

...
WHERE
  (policy_status LIKE '%"employmentType":["status":"success"]%'
   AND
   policy_status LIKE '%"value": 1%');
请参见,了解这两种方法