我目前有一个MySQL表,其中包含一个用于存储类别ID的列。这些ID存储在JSON字符串中。我正在寻找最有效的方法来查询这些JSON字符串的特定ID。
例如:
表: 帖子
字段: 猫
以下是 cats 列中JSON字符串的一些示例值:
[111,123,456]
[123,345,999]
[555,777,888]
我想说我想查询包含id的所有行:" 123"在JSON字符串中。我知道我可以通过一系列 LIKE 比较来实现这一目标,但我确信有一种更有效的方法来查询JSON字符串。任何其他想法将不胜感激。
谢谢!
答案 0 :(得分:7)
{"ids": [2,4,6,7]}
WHERE JSON_CONTAINS(posts.cats->"$.ids", '[2]');
答案 1 :(得分:4)
WHERE JSON_CONTAINS(cats, ID_TO_SEARCH) = 1
答案 2 :(得分:2)
如果您确实需要在JSON字符串中查询特定值,那么最好尝试将各个值存储在数据库中。在上面的示例中,您可以创建一个连接到posts表的字段表。然后,一个简单的连接语句将为您提供所有正确的值。
答案 3 :(得分:2)
有关存储JSON值(Storing Data in MySQL as JSON)的强烈讨论,但您可以使用本机mysql函数:
Mysql官方文档:https://dev.mysql.com/doc/refman/5.7/en/json-functions.html
在
中搜索JSON值的函数
有:
mysql> SET @j = '{"a": 1, "b": 2, "c": {"d": 4}}';
mysql> SET @j2 = '1';
mysql> SELECT JSON_CONTAINS(@j, @j2, '$.a');
或与REGEX类似:
SELECT * FROM posts where cats REGEXP '"id":"[[:<:]]123[[:>:]]"';
或与:
extract_json_value( json_text TEXT CHARSET utf8 xpath TEXT CHARSET utf8 )返回文本字符utf8
这是在mysql上处理JSON的好帖子:http://rpbouman.blogspot.com.es/2015/11/mysql-few-observations-on-json-type.html
希望它有所帮助!