sql-запрос для замены ссылок с определённым доменом

Lazy_bones

Постоялец
Регистрация
11 Дек 2008
Сообщения
432
Реакции
108
Подскажите пожалуйста возможно ли такое сделать. Нужно в базе изменить атрибут у внутренних ссылок. Адрес сайта site1.ru. Убрать rel="nofollow" у всех внутренних ссылок.
К примеру:
site1.ru/statia1.html rel="nofollow"
site1.ru/statia2.html rel="nofollow"
site1.ru/statia3.html rel="nofollow"
site1.ru/statia4.html rel="nofollow"
Должно получиться
site1.ru/statia1.html
site1.ru/statia2.html
site1.ru/statia3.html
site1.ru/statia4.html
Но в новости есть также и ссылки на другие ресурсы, к примеру site2.ru site3.ru(ссылки на различные сторонние ресурсы, всегда различные), атрибут у этих ссылок должен остаться.

Структура гиперссылки, вдруг нужно.
Адрес сайта/Idновости-название в транслите.html
Пример site1.ru/23525-novosti-mira.html

Новостей в базе больше 140 тысяч
 

o_nix

Хранитель порядка
Регистрация
7 Ноя 2007
Сообщения
1.070
Реакции
1.063
можно сделать поиском и заменой по mysql
нужны названия таблиц и полей где заменять

Код:
UPDATE `table` SET `fulltext`=REPLACE(`fulltext`,'html rel="nofollow"','html');

только базу забекапь перед заменой
а то мало ли что )))

подозреваю что движёк DLE
а в нём в инструментах есть удобная форма для поиска и замены, тогда особого смысла делать это через mysql нет
 

t0wer

BlackHerald
Регистрация
24 Июн 2008
Сообщения
743
Реакции
440
Может есть смысл сделать дамп базы, потом взять ее копию и редактором заменить все что нужно, а потом ее накатить на сайт.
Если что-то сделаете не так, всегда можно дамп восстановить как есть. Когда мало опыта в скулях, лучше не экспериментировать и пойти по наименьшему сопротивлению.
Да и проще будет.
 

Lazy_bones

Постоялец
Регистрация
11 Дек 2008
Сообщения
432
Реакции
108
o_nix, да Вы правы, это Dle. Вот названия таблицы и поля.
таблица dle_post
поле full_story
но нужно, чтобы не затронуло ссылки на другие сайты, а только у одного поменять данный атрибут.

t0wer, Можно и так, но нужно заменять через регулярное выражение, чтобы не затронуть ссылки на другие сайты, а я далек от регулярных выражений также как и от запросов в mysql. Поэтому особой разницы нет.

Leony, да, нужен запрос именно касаемый одного сайта.

Вот пример самой ссылки из базы <a href="Для просмотра ссылки Войди или Зарегистрируйся" rel="nofollow" >ходячие мертвецы</a>

Помогите с конечным запросом. Бекап уже сделан
 

Leony

Знаток
Регистрация
17 Мар 2008
Сообщения
164
Реакции
29
Код:
UPDATE `dle_post` SET `full_story`=REPLACE(`full_story`,'html" rel="nofollow" ','html"') WHERE full_story LIKE "%site1.ru%"
 

Lazy_bones

Постоялец
Регистрация
11 Дек 2008
Сообщения
432
Реакции
108
Код:
UPDATE `dle_post` SET `full_story`=REPLACE(`full_story`,'html" rel="nofollow" ','html"') WHERE full_story LIKE "%site1.ru%"
Сделал бекап базы и залил на денвер. Попробовал выполнить данный запрос, он выполняется уже полтора часа (140 тысяч записей в таблице).
В данной таблице есть также поле ID, которое имеет цифровое значаение, может можно как то ограничивать выполнение запроса этим параметром, к примеру брать для обработки часть базы с Id 1 до 10000 и так дальше по частям?

Запрос выполнился, но выполнился он некорректно, т.е. он убрал атрибут rel="nofollow" у всех ссылок.
В поле full_story хранится полный текст новости, каждая новость содержит несколько ссылок на различные сайты. Нужно чтобы убрала данный атрибут только у ссылок site1.ru у остальных ссылок в данном поле этот атрибут должен остаться. По данному же запросу он убрал атрибут полностью у всех ссылок, заканчивающихся на html
 

o_nix

Хранитель порядка
Регистрация
7 Ноя 2007
Сообщения
1.070
Реакции
1.063
так попробуй
Код:
UPDATE `dle_post` SET `full_story`=REPLACE(`full_story`,'html" rel="nofollow" ','html"') WHERE `full_story` LIKE (%site1.ru%)

но проблему это не решит

в каждой записи в котором будет содержаться site1.ru будут заменены все ссылки и site1.ru и site2.ru

те поможет только если у тебя по 1 типу ссылок в каждом посте

если не по одному то проще слить базу в файл и сделать замену по файлу регулярками (составив отдельную регулярку под каждый site1.ru), иначе никак
 

Lazy_bones

Постоялец
Регистрация
11 Дек 2008
Сообщения
432
Реакции
108
Эту проблему можно решить и через перестроение публикации, но проблема в том что оно будет длиться порядка 2 суток и нет возможности на такое время вырубить сайт, а если сайт оставить рабочим, то перестроение вылетает с ошибками рано или поздно. Если бы можно было осуществлять перестроение публикации не разом всех, а также указанный массив ID новостей и поэтапно это делать, но такого решения также не нашел.

А в mysql нет возможности сделать что то подобного. Ищем <a href="Для просмотра ссылки Войди или Зарегистрируйся" rel="nofollow" > , где *.* постоянно меняющие значения и заменить на <a href="Для просмотра ссылки Войди или Зарегистрируйся *.* .html">. Там нет возможности применять регулярные выражения?
 

o_nix

Хранитель порядка
Регистрация
7 Ноя 2007
Сообщения
1.070
Реакции
1.063
в mysql regexp можно использовать только для select запросов

ещё как вариант можно вообще не заморачиваться с заменой в базе

можно на этапе вывода средствами php с помощью regexp подправлять нужные ссылки

но мне вариант обработки дампа и его перезаливка кажется наиболее приемлимым
 
Сверху