【问题标题】:Search a MySQL column with a JSON string for a specific value使用 JSON 字符串在 MySQL 列中搜索特定值
【发布时间】:2016-07-19 03:47:14
【问题描述】:

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

例如:

表格: 帖子

字段:

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


[111、123、456]

[123, 345, 999]

[555、777、888]

假设我想查询 JSON 字符串中包含 id:“123”的所有行。我知道我可以使用一系列 LIKE 比较来完成此操作,但我确信有一种更有效的方式来查询 JSON 字符串。任何其他想法将不胜感激。

谢谢!

【问题讨论】:

  • 这种类型的搜索没有有效的方法。这就是为什么以这种方式存储数据是一个非常糟糕的主意。
  • 嗨@McWayWeb,你的问题解决了吗?任何答案对你有帮助吗?如果是,请尝试标记为已解决以帮助他人并保持 S.O 清洁。谢谢!

标签: mysql json string


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    WHERE JSON_CONTAINS(cats, ID_TO_SEARCH) = 1

    应该可以。 MySQL 5.7 supports JSON types.

    【讨论】:

      【解决方案3】:

      关于存储 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 文本字符集 utf8 xpath 文本字符集 utf8 ) 返回文本字符集 utf8

      这里有一篇在 mysql 上处理 JSON 的好帖子:http://rpbouman.blogspot.com.es/2015/11/mysql-few-observations-on-json-type.html

      希望对你有帮助!

      【讨论】:

        【解决方案4】:

        如果您确实需要查询 JSON 字符串中的特定值,最好尝试将各个值存储在数据库中。在上面的示例中,您可以只创建一个连接到帖子表的字段表。然后一个简单的 join 语句将为您提供所有正确的值。

        【讨论】:

          猜你喜欢
          • 2021-06-02
          • 2023-03-07
          • 2021-12-02
          • 2017-09-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-13
          • 1970-01-01
          相关资源
          最近更新 更多