Задавайте вопросы, мы ответим
Вы не зашли.
Приветствую комрады!
Возникла такая задача, есть поле, допустим list, в котором хранится список значений через запятую, например такой "1,2,22,e,121"
Если мне нужно найти строку таблицы в которой в этом списке есть нужное значение то всё просто:
SELECT
...
WHERE
FIND_IN_SET('1',`list`)
А как сделать изящно update значения в таком списке?
Просто написать
REPLACE(list,'1','2')
WHERE
FIND_IN_SET('1',`list`)
Нельзя, т.к. поменяются все единицы, а не только первый элемент в списке
Можно наверно написать что то монструозное через if-ы проверяя первое значение, последние значение + replace(list,',1,',',2,')
Можно в поле добавить запятые по краям списков всем записям и тогда можно просто делать replace(list,',1,',',2,'), но поле хотелось бы не трогать.
Есть еще какие то, более симпатичные варианты?
Неактивен
Вы все правильно описали. Кажется, что сработает вариант добавить запятые по краям, потом их удалить:
Неактивен
rgbeast написал:
Вы все правильно описали. Кажется, что сработает вариант добавить запятые по краям, потом их удалить:
TRIM(BOTH ',' FROM replace(concat(',',list,','),',1,',',2,'))
Супер! Идея на лету добавить/удалить запятые отличная! Спасибо
Неактивен