mysql - 如何使用通配符从mysql查询json数据

标签 mysql json laravel

我正在使用 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/

相关文章:

jquery - 在 jquery ajax 中从 JS 端的 JsonResult 获取属性

php - 在 Laravel 5.1 分页中使用漂亮的 URL

php - 使用php将sql中的数据导出到excel

c# - 变量未声明或从未分配?和数据读取器不工作?

javascript - 查询复杂的json

php - 自定义 Laravel 关系?

php - Laravel 4 中未加载自定义验证类

mysql - 使用 COUNT 时改进 MySQL 删除查询

mysql - 将 MYSQL 表导出为 CSV 时如何处理空字段

javascript - while 循环内的函数