Допустим, есть задача: в определенной таблице заменить в некотором поле символ "&" на "-":
Сложный способ:
UPDATE `table_name` t1, `table_name` t2
SET t1.`field_name`= REPLACE(t2.`field_name`, '&', '-')
WHERE t1.id = t2.id
Так как вся работа происходит в одной таблице, то необходимо использовать механизм алиасов для работы с одной таблицей как с двумя. Важным критерием является условие t1.id = t2.id, так как мы должны изменять одно и то же поле.
Или более простой вариант, который работает когда t1.id = t2.id и лишние проверки можно отбросить:
UPDATE `table_name`
SET `field_name`= REPLACE(`field_name`, '&', '-');
Сам механизм замены предельно прост:
REPLACE(имя поля или просто текст, что меняем, на что меняем)
Простое и удобное решение. Надеюсь кому-то пригодится.
Хм, а чем плох обычный вариант?
ОтветитьУдалитьUPDATE `table_name`
SET `field_name`= REPLACE(`field_name`, '&', '-');
Можно и обычно. Просто использовал общий подход для выборки.
ОтветитьУдалитьа как насчет замены по регулярному выражению без использования php?
ОтветитьУдалитьа где вы тут PHP увидели?
ОтветитьУдалитьа зачем отвечать вопросом на вопрос? про использование пхп было сказано как в общем случае делают. а как юзать регулярки в мускуле вопрос интереснее
УдалитьСпасибо! очень пригодился простой вариант.
ОтветитьУдалитьмерси )
ОтветитьУдалитьспс
ОтветитьУдалитьСпасибо, все работает!
ОтветитьУдалитьА что скажите на счет производительности? REPLACE - очень тяжелый?
ОтветитьУдалитьПо скорости в лучшем случае как INSERT, в худшем как DELETE+INSERT.
УдалитьХудший случай если найденная строка таблицы до замены и после замены содержит одинаковые (те же самые) значения первичного ключа или уникального индекса (т.е. они не поменялись)
Спасибо друг.
УдалитьСпасибо! Подсобила статья!
ОтветитьУдалитьА как насчет регулярки?
ОтветитьУдалитьРебята, а как мне в базе заменить ошибки написанные ранее связанные с экранированными символами, вот пример: текст бла бла бла. \r\nОпять текст бла бла бла \"С новым годом\" бла бла бла...
ОтветитьУдалитьЕсли сделать запрос select * from field where like '%\r\n%' он попросту его не находит (как только не пробовал, работает только '%\\n%' или '%\\r%'
Так правильно, работает потому что нужно экранировать слеши: http://www.mysql.ru/docs/man/String_syntax.html
Удалитьа каким образом в весь столбец в таблице добавить текстовую информацию в конец уже имеющейся ? т.е. есть текстовое описание, а мне к этому описанию нужно добавить еще одну фразу. может кто подскажеткоманды в phpmyadmin?
ОтветитьУдалитьUPDATE table_name SET textfield = concat(textfield, 'some text')
УдалитьИ выполнить запрос в phpmyadmin для нужной таблицы `table_name`.
УдалитьРекомендую ознакомиться с докой по строковым функциям в mysql: http://phpclub.ru/mysql/doc/string-functions.html
Thank you very much, Sergey Saenko, came in handy!
ОтветитьУдалить