SQL найти и заменить - PullRequest
       8

SQL найти и заменить

1 голос
/ 23 декабря 2010

Как мне сделать следующее:

На моем сайте Wordpress я хочу заменить что-то в содержании сообщения

Все экземпляры: http://play.videolog.tv/videos/xx/xx/yyyyyy.flv

Заменить на: [Видеолог] YYYYYY [/ Видеолог]

xx может содержать 2 или 3 цифры, но yyyyyy всегда 6 цифр.

Пример:

http://play.videolog.tv/videos/93/80/398682.flv до [videolog] 398682 [/ videolog]

Ответы [ 2 ]

3 голосов
/ 23 декабря 2010

Обновление:

update MyTable
set MyColumn = concat('[videolog]', replace(SUBSTRING(SUBSTRING_INDEX(MyColumn, '/', -1), 2), '.flv', '[/videolog]'))
where MyColumn like 'http://play.videolog.tv/videos/%'
0 голосов
/ 24 декабря 2010

Требуется некоторое волшебство строки, чтобы сделать это полностью в MySQL. Я считаю, что это должно работать:

UPDATE posts_table
SET posts_table.post_text = REPLACE(posts_table.post_text, @full_url := MID(posts_table.post_text, @url_start := LOCATE('http://play.videolog.tv/videos/', posts_table.post_text), LOCATE('.flv', posts_table.post_text, @url_start) + 4 - @url_start), 
CONCAT('[videolog]', MID(@full_url, LENGTH(@full_url) - LOCATE('/', REVERSE(@full_url)) + 2, 6), '[/videolog]'))
WHERE LOCATE('http://play.videolog.tv/videos/', posts_table.post_text)

Вы можете проверить это с помощью этого запроса:

SELECT REPLACE(posts_table.post_text, @full_url := MID(posts_table.post_text, @url_start := LOCATE('http://play.videolog.tv/videos/', posts_table.post_text), LOCATE('.flv', posts_table.post_text, @url_start) + 4 - @url_start), 
CONCAT('[videolog]', MID(@full_url, LENGTH(@full_url) - LOCATE('/', REVERSE(@full_url)) + 2, 6), '[/videolog]')) AS `result`
FROM posts_table
WHERE LOCATE('http://play.videolog.tv/videos/', posts_table.post_text)

Просто замените posts_table и post_text правильными именами таблиц / столбцов.

Этот запрос должен заменить все экземпляры этого URL, даже если он находится в середине текста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...