【问题标题】:JSON_CONTAINS unable to find from MySQLJSON_CONTAINS 无法从 MySQL 中找到
【发布时间】:2019-01-24 03:13:13
【问题描述】:

在 MySQL 中,我使用 PHP 的 json_encode 将数据存储在“jsonValues”字段中:

{"product_category":[[{"category":["28"]},{"product":["16","22","64"]}]]}

通过PHP,我想通过编写以下查询来获取数据:

SELECT * FROM `dbTable` 
WHERE JSON_CONTAINS(jsonValues, '"category":["28"]');

但是,它显示错误

3141 - 函数 json_contains 的参数 2 中的 JSON 文本无效:“文档根不得跟随其他值。”在位置 10。

【问题讨论】:

  • 为什么要将 JSON 存储在数据库中?您不能将它们存储在适当的数据库模式中吗? JSON_CONTAINS 可能不是您想要的,您可能正在搜索 JSON_EXTRACT。使用方法见stackoverflow.com/a/39163928/3223157
  • @Xatenev 我不能,因为我需要存储的信息无法存储到正确的数据库模式中,因为它们并不相同。
  • 查看我的第一条评论的编辑。
  • 试试这样的SELECT * FROM 'dbTable' WHERE JSON_CONTAINS(jsonValues, '$.category');参考:[dev.mysql.com/doc/refman/5.7/en/…
  • 我已经尝试过了,但什么也没返回。 SELECT * FROM dbTable` WHERE JSON_CONTAINS(jsonValues, '["28"]', '$.shipping_location');`

标签: php mysql json mysql-json


【解决方案1】:

您是否尝试过像 mysql 文档那样在搜索词周围添加大括号?

SELECT * FROM `dbTable` WHERE JSON_CONTAINS(jsonValues, '{"category":["28"]}');

【讨论】:

  • 谢谢你,但它也没有返回任何东西。
  • 我的问题中提到的 jsonValues 有什么问题吗?
【解决方案2】:

编写以下代码后返回该行:

SELECT * FROM `dbTable` WHERE JSON_CONTAINS(jsonValues, '{"category":["28"]}', '$.product_category');

【讨论】:

    【解决方案3】:

    如果上述方法都不适合你,那么试试下面的代码它应该可以工作。

    SELECT * FROMdbTable WHERE JSON_CONTAINS(jsonValues, '{"product_category": [[{"category": ["28"]}]]}');

    【讨论】:

      【解决方案4】:

      我遇到了同样的问题, 我在数据库中保存数据如下,

      $id = '1';
      json_encode(array($id)); //in DB it stores like this => ["1"]
      

      我把它改成了

      $id = '1';
      json_encode(array(intval($id))); //in DB it stores like this => [1]
      

      那么这个查询就完美运行了。

      Select * from table where WHERE JSON_CONTAINS(json_col, '$id');
      

      希望以后能对大家有所帮助。

      【讨论】:

        猜你喜欢
        • 2020-04-14
        • 2019-02-04
        • 2018-02-11
        • 2020-09-04
        • 2017-11-01
        • 2018-02-16
        • 1970-01-01
        • 2021-03-07
        • 2023-03-18
        相关资源
        最近更新 更多