При работе над проектом возникла задача: во всех статьях сайта обнаружить и заменить одно строковое значение, на другое. С учетом того, что таких страниц больше пяти сотен, в ручную заниматься этим, совершенно нерационально. Все страницы формируются из статей, размещенных в таблице БД. Следовательно, задача сводится к обработке всех записей таблицы, поиску в них нужного стокового значения и его замены на новое.
Часто для таких задач прибегают к использованию регулярных выражений или делают PHP-скрипт, который обрабатывает каждую строку по отдельности.
Но данную задачу гораздо проще выполнить простым SQL запросом. Для такой ситуации, SQL располагает функцией REPLACE. Эта функция позволяет очень просто удалить или заменить часть текста в строке.
REPLACE("исходная строка", "искомое значение", ["значение для замены"] )
Следовательно, для замены строки значения "10000" во всех строках таблицы на "15000", используем запрос:
UPDATE pages SET content = REPLACE (content, "10000", "15000");
Такой запрос обработает все строки таблицы pages, исправив значение поля content, если оно содержит искомую фразу "10000".
Для удаления используем подобный запрос, в котором укажем либо пустую строку третьим параметром, либо просто не указывая этот параметр:
UPDATE pages SET content = REPLACE (content, "10000", "");
UPDATE pages SET content = REPLACE (content, "10000");
В результате, в каждой строке таблицы pages, во всех значений поля content будет удалено текстовое значение 10000.
* Подобный механизм можно использовать для очистки или замены тегов, но нужно быть внимательным. Так как здесь идет сравнение строк строго по равенству, то может возникнуть ошибка и теги, содержащие классы или стили удалены не будут.
Условия отбора в запросе SQL (WHERE)
Переименование таблицы БД запросом SQL (RENAME TABLE)
Удаление повторяющихся строк в таблице запросом SQL
Алексей
- 24 марта 2023, 12:32 ↓Таким способом вы получите вместо «100000» значение «150000». А по заданию требуется менять только значение «10000».
Антон Сенников
- 30 сентября 2022, 10:49 ↓Но спасибо за замечание, Актан.
Актан
- 30 сентября 2022, 08:44 ↓