Массовая замена текста по всей базе данных MySQL по всему сайту в phpMyAdmin

В этой статье рассмотрим, как сделать однотипную массовую замену в базе данных сайта с помощью SQL-запроса. Это позволит быстро поменять все без исключения ссылки, например при смене папки или при создании нового меню. Также это может потребоваться при смене названия компании. чтобы не проверять и не вычитывать каждую статью на сайте и не вылавливать по одной ссылке. Для того, чтобы обратиться к MySQL-серверу проще всего воспользоваться бесплатной программой phpMyAdmin, которая присутствует почти на любом сервере, на котором установлен MySQL-сервер.



SQL-запрос замены одного текстового фрагмента на другой

Сначала приведу общий синтаксис SQL-запроса, который позволяет сделать замену одного текста на другой. Ниже будет пример.

SQL-запрос замены одного текстового фрагмента на другой в общем случае выглядит следующим образом:

UPDATE `table` SET `column-1` = REPLACE( `column-1`, 'search-1', 'replace-1' ), `column-N` = REPLACE( `column-N`, 'search-N', 'replace-N' ) WHERE 1

Что есть что:

  • Команды и функции:
    • UPDATE — команда редактирования записей в таблицах базы данных
    • SET — в данном случае команда объявления таблицы, с которой будут производится операции поиска и замены
    • REPLACE — заменяет в строке column  все вхождения search на replace
    • WHERE — служит для задания дополнительного условия выборки, операций вставки, редактирования и удаления записей. В нашем случае = 1, поэтому замена будет сквозная, то есть при любом совпадении текста со строкой search, она буден заменена на строку replace.

Как видно, в один SQL-запрос можно вставлять несколько значений замены по разным записям column таблицы table.

Пример SQL-запроса замены одного фрагмента URL на другой в БД Joomla

У меня стояла задача: поменять все ссылки, которые есть в тексте всех статей сайта потому, что я сделал новый пункт меню и URL статей поменялись. А все ссылки в статьи я вставляю вручную. Поэтому пришлось бы открывать каждую статью, где встречается ссылка на этот пункт меню и заменять URL вручную. Однако, сформировав запрос:

UPDATE `joomla_content` SET `introtext` = REPLACE( `introtext`, 'cms/joomla/70-nextend.html', 'cms/joomla/nextend.html' ), `fulltext` = REPLACE( `fulltext`, 'cms/joomla/70-nextend.html', 'cms/joomla/nextend.html' ) WHERE 1
UPDATE `joomla_categories` SET `description` = REPLACE( `description`, 'cms/joomla/70-nextend.html', 'cms/joomla/nextend.html' ) WHERE 1

Я за секунду поменял все ссылки во всех статьях. Как это произошло?

Я знаю, что все статьи хранятся в таблице joomla_content. Причём только в двух записях: introtext — в ней хранится вступительная часть статьи и fulltext — в ней хранится то, что следует после Read more.

А все описания категорий хранятся в таблице joomla_categories в поле description.

Данный запрос заменит то, что нужно было: текст в URL с cms/joomla/70-nextend.html на cms/joomla/nextend.html, что и отображено в запросе.

Вот и всё! =)

В заключение...

Для тех, кто редко пользуется прямыми SQL-запросами к базе данных сайта, я рекомендую сделать бамп базы данных, чтобы, если что-то пойдёт не так, откатить БД в начальное состояние. От бэкапа ещё никто не умирал. =D

Заберите ссылку на статью к себе, чтобы потом легко её найти!
Раз уж досюда дочитали, то может может есть желание рассказать об этом месте своим друзьям, знакомым и просто мимо проходящим?
Не надо себя сдерживать! ;)

Старт! Горячий старт на просторы интернета
Старт! Горячий старт на просторы интернета
Старт! Меню