Какой запрос к базе для удаления повторяющегося текста?

NeoDesign
На сайте с 03.09.2009
Offline
164
1093

Что имеем - на сайте много материалов. Во многих из них в теле статьи имеется в конце одинаковый текст. Иногда он встречается и в середине статей. Как можно на автомате удалить этот текст? Может есть какие-то запросы к базе данных, где можно указать данный текст к удалению?

Сайт имеет базу данных mysql.

webiumpro
На сайте с 20.03.2017
Offline
39
#1

Сомневаюсь, что будут готовые решения в mysql. Я вижу такое решение. Ищите в базе строк с таким текстом, что-то вроде "select id, field from table where field like '%text%'". Затем проходитесь циклом по всем полученным строка и с помьщью preg_replace вырезаете эту часть и сразу же сохраняете в таблицу.

Правда, с производительностью такого подхода могут быть проблемы. Тогда придется разбивать это все по частям. Обрабатывать не все строки, а по определенному количеству.

Копирование лендингов. Разработка на фреймворке сервисов. Создание сайтов (/ru/forum/994418)
totamon
На сайте с 12.05.2007
Offline
437
#2

типа такого запрос заменит текст на пусто

UPDATE таблица SET текстовое_поле= replace(текстовое_поле, 'текст_который удалить', '');

Домены и хостинг https://8fn.ru/regru | Дедик от 3000р https://8fn.ru/73 | VPS в Москве https://8fn.ru/72 | Лучшие ВПС, ТП огонь, все страны! https://8fn.ru/inferno | ХОСТИНГ №1 РОССИИ https://8fn.ru/beget
NeoDesign
На сайте с 03.09.2009
Offline
164
#3
totamon:
типа такого запрос заменит текст на пусто
UPDATE таблица SET текстовое_поле= replace(текстовое_поле, 'текст_который удалить', '');

Да, это то решение. Однако столкнулся с такой проблемой - в тексте, который надо удалить есть верхняя кавычка ‘. Как ее возможно представить в запросе? Пришлось отдельно удалить все то, что было до нее и после. А вот с ней не получался запрос. Теперь проблема в удалении этой кавычки.

Z0
На сайте с 03.09.2009
Offline
756
#4
NeoDesign:
Да, это то решение. Однако столкнулся с такой проблемой - в тексте, который надо удалить есть верхняя кавычка ‘. Как ее возможно представить в запросе? Пришлось отдельно удалить все то, что было до нее и после. А вот с ней не получался запрос. Теперь проблема в удалении этой кавычки.

Так разве не работает?

UPDATE таблица SET текстовое_поле= replace(текстовое_поле, "текст_который удалить", "")
NeoDesign
На сайте с 03.09.2009
Offline
164
#5
ziliboba0213:
Так разве не работает?

Вот благодарю! Надо было кавычку в двойные кавычки взять! Получилось. А ссылки в теле постов можно каким-то запросом убрать, чтобы текст остался, а ссылки из него удалились?

Z0
На сайте с 03.09.2009
Offline
756
#6
NeoDesign:
Вот благодарю! Надо было кавычку в двойные кавычки взять! Получилось. А ссылки в теле постов можно каким-то запросом убрать, чтобы текст остался, а ссылки из него удалились?

http://www.sql.ru/forum/1058171/udalenie-ssylok-iz-bazy Поиск вам в помощь 🍿

Пишут, что проще php регулярками:



$db = mysql_connect('host', 'user', 'password');
mysql_select_db('database');
$query = "SELECT * FROM `table` WHERE `link` LIKE '%\<a %'";
$res = mysql_query($query);
while($row = mysql_fetch_array($res)){
$newlink=preg_replace("'<[\/\!]*a[^<>]*?>'si", '', $row['link']);
mysql_query("UPDATE `table` SET `link` = '".$newlink."' WHERE `link` = '".$row['link']."';");
}
mysql_close($db);

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий