JSON_CONTAINS 无法从 MySQL 中找到
Posted
技术标签:
【中文标题】JSON_CONTAINS 无法从 MySQL 中找到【英文标题】:JSON_CONTAINS unable to find from 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
。使用方法见***.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');`
【参考方案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 * FROM
dbTable
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');
希望以后能对大家有所帮助。
【讨论】:
以上是关于JSON_CONTAINS 无法从 MySQL 中找到的主要内容,如果未能解决你的问题,请参考以下文章
JSON_CONTAINS() 与 MySQL 中的 JSON 对象数组
MySQL JSON - 使用 IN 语句 | json_contains
mysql中json_contains和json_search的区别