Выбрать запрос для строк, которые содержат определенные c значения в массиве json? - PullRequest
0 голосов
/ 05 августа 2020

В настоящее время у меня есть эта таблица

ID | Seller_Name | Seller_Non_Working_Day
1 | Seller A | [1,7]
2 | Seller B | [1]
3 | Seller C | []
4 | Seller D | [1,7]

Я пытаюсь извлечь продавца, который не работает только по воскресеньям, также как с [1] в поле Seller_Non_Working_Day. Это поле типа JSON.

Это мой запрос, и я не получаю никакого ответа: (

select * from table_name
where Seller_Non_Working_Day IN ('[1]')

Может помочь, пожалуйста?

1 Ответ

0 голосов
/ 05 августа 2020

MySQL JSON_OVERLAPS функция сравнивает два doc_path или массивы. Она возвращает 0, если значение не совпадает, и 1, если оно совпадает.

JSON_OVERLAPS(doc_path1, doc_path2)

Для вашего запроса я создал второй массив с одним значением [1], т.е. для воскресенья. Это сравнит все записи и вернет 0 и 1. Результат запроса для продавцов, работающих по воскресеньям, вернет 1. Чтобы исключить ненужные записи, которые возвращают 1, я добавил предложение WHERE . Вот запрос:

SELECT * FROM table_name 
WHERE JSON_OVERLAPS(Seller_Non_Working_Day , '[1]') != 1 ;

Существует еще одна функция JSON_CONTAINS , которая выведет список всех записей, содержащих заданное значение c, например [1] в любой позиции в массиве JSON. Синтаксис JSON_CONTAINS:

JSON_CONTAINS(target, candidate[, path])

target is a specific field. Here it would be Seller_Non_Working_Day
candidate is a specific value to find. Here it would be [1]
Path is any specific array location which is optional.

Можно использовать приведенный ниже запрос для получения всех продавцов, которые работают по воскресеньям.

SELECT * FROM table_name 
WHERE JSON_CONTAINS(Seller_Non_Working_Day , '[1]');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...