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