Помогите с sql-запросом - шаблонный replace

12
HJ
На сайте с 14.02.2006
Offline
274
1104

Речь про wordpress. Нужно шаблонно в каждом посте заменить одну строку на заголовок записи.

Нужно для каждой записи взять содержание поля post_title в таблице wp_posts и заменить в содержании поля post_content (тоже в таблице wp_posts) одну строку на значение post_title.

Замена делается следующим образом:

UPDATE `wp_posts` SET `post_content` = REPLACE( post_content, 'search', 'replace' ) ;

Как сделать, чтобы для каждой записи брался соответствующий ей заголовок и подставлялся вместо строки 'search'?

KS
На сайте с 11.06.2012
Offline
17
#1

Немного не понял. Вы наверно имели в виду "чтобы для каждой записи брался соответствующий ей заголовок и подставлялся вместо строки 'replace'"? То есть вы какую-то фиксированную строку хотите заменить на заголовок статьи, так? Если да, то вот так:


UPDATE `wp_posts` SET `post_content` = REPLACE( post_content, 'это заменится на заголовок', `post_title` ) ;
FileSafe (http://filesafe.anek.ws/) - мониторинг неизменности файлов сайта для защиты от взлома. Для форумчан - первый год бесплатно.
SeVlad
На сайте с 03.11.2008
Offline
1609
#2
happy-joker:
Как сделать, чтобы для каждой записи брался соответствующий ей заголовок и подставлялся вместо строки 'search'?

Поиск рулит

siv1987:
"Текст разный" на mysql не заменить, нет по умолчанию функции регулярных выражений для реплейса, если только не установлено UDF расширение lib_mysqludf_preg.

Там же ниже есть варианты решений.

Делаю хорошие сайты хорошим людям. Предпочтение коммерческим направлениям. Связь со мной через http://wp.me/P3YHjQ-3.
HJ
На сайте с 14.02.2006
Offline
274
#3
KostaShah:
То есть вы какую-то фиксированную строку хотите заменить на заголовок статьи, так?

Да.

KostaShah:
Если да, то вот так:

UPDATE `wp_posts` SET `post_content` = REPLACE( post_content, 'это заменится на заголовок', `post_title` ) ;

post_title в данном запросе обработается как переменная или как простая строка?

SeVlad:
Там же ниже есть варианты решений.

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

KS
На сайте с 11.06.2012
Offline
17
#4

post_title будет воспринято как имя поля таблицы, потому что оно заключчено в косые кавычки ``. Можно и без них, главное чтобы без одинарных или двойных ковычек. Для каждой строки будет взято значение из поля post_title, и подставлено вместо строки 'это заменится на заголовок' в тексте, находящемся в поле post_content этой же строки. Советую сделать копию таблицы, попробовать на ней, посмотреть что получится. Если то, что надо, тогда уже запускать на реальной таблице.

HJ
На сайте с 14.02.2006
Offline
274
#5
KostaShah:
post_title будет воспринято как имя поля таблицы

В таблице много записей. Для каждого post_content будет браться соответствующий этой конкретной записи post_title?

siv1987
На сайте с 02.04.2009
Offline
427
#6
Для каждого post_content будет браться соответствующий этой конкретной записи post_title?

Да.

Главное чтобы "search" у вас был константой строкой/словом.

HJ
На сайте с 14.02.2006
Offline
274
#7

UPDATE `wp_posts` SET `post_content` = REPLACE( post_content, 'это заменится на заголовок', `post_title` ) ;

И, надеюсь, последний вопросик: если, допустим нужно заменить не просто на post_title, а на строку "post_title бла бла бла", то какой правильный синтаксис? В мануалах таких подробностей не нашел.

IL
На сайте с 20.04.2007
Offline
435
#8

CONCAT (post_title,' бла бла бла')
... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
siv1987
На сайте с 02.04.2009
Offline
427
#9

'это заменится на заголовок', CONCAT(`post_title`, 'бла бла бла')

IL
На сайте с 20.04.2007
Offline
435
#10

Результатом будет "post_title бла бла бла", подставить в нужное место...

12

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