我正在使用 laravel 和 mysql 5.7 以及 json。 这是我来自数据库的 json 数据。
mysql> select goods from packet_code where id=582 \G
*************************** 1. row ***************************
goods:
[
{"code": "S87719300077661", "size": "7", "loged_by": "93,xx"},
{"code": "S87719300094874", "size": "9", "loged_by": "93,xx"},
{"code": "S87719300112648", "size": "11", "loged_by": "93,xx"}
]
1 row in set (0.05 sec)
我尝试了这个查询;
select * from packet_code wheregoods->'$[0].code'="S87719300077661;"
它工作正常,我得到了结果。
但问题是元素不是按顺序存储的,它可能存储在第二个或第三个位置。
当我尝试这个时
select * from packet_code wheregoods->'$[*].code'="S87719300077661";
我什么也没得到。
JSON_CONTAINS 也可以正常工作:
select * from packet_code where JSON_CONTAINS(goods,'"S87719300077661"','$[0].code');
但是当我使用通配符时
select * from packet_code where JSON_CONTAINS(goods,'"S87719300077661"','$[*].code');
我收到此错误:
在这种情况下,路径表达式可能不包含 * 和 ** 标记。
尝试将 '$[0].code'
更改为 $[0 to last].code
也不起作用。
最佳答案
一个选项是:
SELECT `id`, JSON_PRETTY(`goods`)
FROM `packet_code`
WHERE JSON_SEARCH(
`goods`,
'all',
'S87719300077661',
NULL,
'$[*].code') IS NOT NULL;
参见dbfiddle .
关于mysql - 如何使用通配符从mysql查询json数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53018223/