如何使用mysql中的通配符查询json数据

2mbi3lxu  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(445)

我正在使用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 where goods->'$[0].code'="S87719300077661;" 它运行良好,我得到了一个结果。
但问题是元素不是按顺序存储的,它可能存储在第二或第三个位置。
当我尝试这个的时候 select * from packet_code where goods->'$[*].code'="S87719300077661"; 我什么都没有。此外,jsonèU还包含一些很好的功能:

select *  from packet_code where JSON_CONTAINS(goods,'"S87719300077661"','$[0].code');

但当我使用通配符

select *  from packet_code where JSON_CONTAINS(goods,'"S87719300077661"','$[*].code');

我有个错误: In this situation, path expressions may not contain the * and**tokens. 尝试改变 '$[0].code'$[0 to last].code 也不行。

w6lpcovy

w6lpcovy1#

一种选择是:

SELECT `id`, JSON_PRETTY(`goods`)
FROM `packet_code`
WHERE JSON_SEARCH(
  `goods`,
  'all',
  'S87719300077661',
  NULL,
  '$[*].code') IS NOT NULL;

见小提琴。

相关问题