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

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

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

4
David542 8 Дек 2018 в 02:08

1 ответ

Лучший ответ

Если вы знаете, что в массиве никогда не бывает дубликатов, вы можете использовать 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.

6
Nick 8 Дек 2018 в 00:52