Как использовать подстановочный запрос данных JSON из MySQL - PullRequest
0 голосов
/ 27 октября 2018

Я использую 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"; Iничего не получить.Также JSON_CONTAINS работает нормально:

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 тоже не работают.

1 Ответ

0 голосов
/ 28 октября 2018

Один из вариантов:

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

См. dbfiddle .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...