Поиск и замена, непростая задачка, ДЛЕ БД. Need Help.

BadBoy
На сайте с 31.01.2005
Offline
308
926

Приветствую

Задача.

Заменить текст на новый

В БД есть такие записи как (старый текст)

[attachment=5]

[attachment=6]

[attachment=7]

...

[attachment=2000]

атачмент не повторяется, у него id разные

надо заменить их на (новый текст)

[newtag][attachment=5][/newtag]

[newtag][attachment=6][/newtag]

[newtag][attachment=7][/newtag]

...

[newtag][attachment=2000][/newtag]

при замене, id должны сохраниться.

Как такое можно сделать автоматически?

LinnTroll
На сайте с 12.01.2011
Offline
15
#1
BadBoy:
Приветствую
Задача.

Заменить текст на новый

В БД есть такие записи как (старый текст)
[attachment=5]
[attachment=6]
[attachment=7]
...
[attachment=2000]

атачмент не повторяется, у него id разные

надо заменить их на (новый текст)
[newtag][attachment=5][/newtag]
[newtag][attachment=6][/newtag]
[newtag][attachment=7][/newtag]
...
[newtag][attachment=2000][/newtag]

при замене, id должны сохраниться.
Как такое можно сделать автоматически?

Както так


UPDATE `table_name` SET `column_name`=CONCAT('[newtag]',`column_name`,'[/newtag]')
http://vps.ua/ (https://vps.ua/clients/aff.php?aff=201) - самый лучший хостинг.
siv1987
На сайте с 02.04.2009
Offline
427
#2

Если есть вот это http://www.mysqludf.org/lib_mysqludf_preg/index.php#PREG_REPLACE_SECTION

UPDATE dle_post SET full_story = PREG_REPLACE( '/(?<!\\[newtag\\])(\\[attachment=\\d+\\])/', '[newtag]$1[/newtag]', full_story ) WHERE full_story LIKE "%[attachment%" иначе только на php


$res = mysql_query( 'SELECT * FROM dle_post WHERE full_story LIKE "%[attachment%"' );
while( $row = mysql_fetch_assoc($res) )
{
if( preg_match('#(?<!\[newtag\])(\[attachment=\d+\])#', $row['full_story']) )
{
$row['full_story'] = preg_replace( '#(?<!\[newtag\])(\[attachment=\d+\])#', '[newtag]$1[/newtag]', $row['full_story'] );

mysql_query( 'UPDATE dle_post SET full_story = '.mysql_escape_string($row['full_story']).' WHERE id='. $row['id'] );
echo 'Update post '.$row['id'].'<br />';
}
}
BadBoy
На сайте с 31.01.2005
Offline
308
#3
LinnTroll:
Както так

весь пост будет в данном теге

siv1987:
Если есть вот это

к сожалению нету...

может есть способ использовать какуюнить прогу типа notepad2 или ++ или еще что?

LinnTroll
На сайте с 12.01.2011
Offline
15
#4
BadBoy:
весь пост будет в данном теге

Не понял вас

---------- Добавлено в 15:32 ---------- Предыдущее сообщение было в 15:26 ----------

BadBoy:

может есть способ использовать какуюнить прогу типа notepad2 или ++ или еще что?

Да, экспортируйте дамп таблицы, и правте в любом текстовом редакторе

Jekyll
На сайте с 04.05.2009
Offline
136
#5
BadBoy:


может есть способ использовать какуюнить прогу типа notepad2 или ++ или еще что?

Можно через notepad++

Дампите таблицу, открываете в notepad++, нажимаете Ctrl+F

Вкладка "Заменить"

Там где Найти - пишете \[attachment=(.*)\]

Заменить на: [newtag][attachment=\1][/newtag]

Внизу переключаете на регулярные выражения

И нажимаете "Заменить все". Потом импортировать дамп с заменами обратно в БД.

Joker-jar
На сайте с 26.08.2010
Offline
171
#6

С дампом идею можно попробовать реализовать. Далее в нем поиск с заменой по регулярному выражению и обратно заливка

BadBoy
На сайте с 31.01.2005
Offline
308
#7

спасибо за помощь, все оказалось очень просто.

данный атачмент находился в конце поста, соответственно после шли повторяющиеся символы БД, а именно ( ', '', ' ), я их и заменил на ( [/newtag]', '', ' )

все получилось, но данный совет я попробую тоже

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