使用JSON字符串搜索特定值的MySQL列

时间:2016-03-30 22:15:45

标签: mysql json string

我目前有一个MySQL表,其中包含一个用于存储类别ID的列。这些ID存储在JSON字符串中。我正在寻找最有效的方法来查询这些JSON字符串的特定ID。

例如:

表: 帖子

字段:

以下是 cats 列中JSON字符串的一些示例值:

[111,123,456]

[123,345,999]

[555,777,888]

我想说我想查询包含id的所有行:" 123"在JSON字符串中。我知道我可以通过一系列 LIKE 比较来实现这一目标,但我确信有一种更有效的方法来查询JSON字符串。任何其他想法将不胜感激。

谢谢!

4 个答案:

答案 0 :(得分:7)

猫必须包含:{"ids": [2,4,6,7]}

WHERE JSON_CONTAINS(posts.cats->"$.ids", '[2]');

答案 1 :(得分:4)

WHERE JSON_CONTAINS(cats, ID_TO_SEARCH) = 1

应该有效。 MySQL 5.7 supports JSON types.

答案 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

希望它有所帮助!