Удалить элемент массива по значению в MySQL JSON - PullRequest
0 голосов
/ 08 декабря 2018

Возможно ли удалить элемент по его значению (а не по индексу) в массиве json в mysql?Например:

# ['new', 'orange']
update waitinglist SET new = JSON_REMOVE("orange", '$') WHERE id=2;
# now it will be ['new']

Если нет, есть ли лучший способ сохранить это, чтобы я мог удалять элементы по мере необходимости?Кроме того, в массиве никогда не будет дубликатов.

1 Ответ

0 голосов
/ 08 декабря 2018

Если вы знаете, что в массиве никогда не бывает дубликатов, вы можете использовать JSON_SEARCH, чтобы найти путь к значению, которое вы хотите удалить, а затем используйте JSON_REMOVE, чтобы удалить его.Обратите внимание, что вам нужно проверить, что JSON_SEARCH действительно находит значение, в противном случае JSON_REMOVE приведет к аннулированию всего поля:

UPDATE waitinglist 
SET new = JSON_REMOVE(new, JSON_UNQUOTE(JSON_SEARCH(new, 'one', 'orange')))
WHERE JSON_SEARCH(new, 'one', 'orange') IS NOT NULL

Я сделал небольшую демонстрацию для dbfiddle .

Обратите внимание, что вы должны использовать JSON_UNQUOTE в ответе от JSON_SEARCH, чтобы сделать его действительным путем для JSON_REMOVE.

...