SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 19.04.2017 18:32:21

VARjet
Участник
Зарегистрирован: 19.04.2017
Сообщений: 7

Удалить картинки в тексте

Все доброго времени суток, в большинстве постах имеются картинки с текстом <img class="kartinka" alt="Spec" src="ссылка на картинку" width="280" height="300" />. В данный момент нужно удалить код картинок в постах, где они есть, а текст оставить, какой нужен запрос в mysql что бы удалить ( ОТ <img ДО height="300" /> ) включительно. Пробовал вот такой вариант

UPDATE `posts` SET `column` = REPLACE( column, '/<img.*?\/ height="300" />/i', ' ' ) ;


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

Неактивен

 

#2 19.04.2017 18:59:41

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5827

Re: Удалить картинки в тексте

комбинацией locate и substring
определяете позицию <img и последующего /> и вырезаете этот кусок
одним update будет удалятся по одной (самой первой) картинке в каждом посте
т.е. нужно будет несколько раз выполнить update

http://sqlinfo.ru/forum/viewtopic.php?id=591

Неактивен

 

#3 19.04.2017 19:23:00

VARjet
Участник
Зарегистрирован: 19.04.2017
Сообщений: 7

Re: Удалить картинки в тексте

я новичок в mysql прочитал сейчас про эти функции
но как я понял работают с повторяющими словами, а у меня получается в каждом <img /> URL разный
или я не правильно понял?

Отредактированно VARjet (19.04.2017 19:24:34)

Неактивен

 

#4 19.04.2017 19:38:56

VARjet
Участник
Зарегистрирован: 19.04.2017
Сообщений: 7

Re: Удалить картинки в тексте

set @a = '<img';
select locate(' ', @a);
select substring(@a, 7, locate(' ', @a));
UPDATE `posts` SET `column` = substring(`column`, 7, locate(' ', `column`));
 

я как понял вот так должно выглядеть?

Неактивен

 

#5 19.04.2017 19:51:47

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5827

Re: Удалить картинки в тексте

VARjet написал:

я новичок в mysql прочитал сейчас про эти функции
но как я понял работают с повторяющими словами, а у меня получается в каждом <img /> URL разный
или я не правильно понял?

урл разный, но вырезаете вы то что находится между "<img" и "/>", а они всегда одинаковые.

VARjet написал:

set @a = '<img';
select locate(' ', @a);
select substring(@a, 7, locate(' ', @a));
UPDATE `posts` SET `column` = substring(`column`, 7, locate(' ', `column`));
 

я как понял вот так должно выглядеть?

нет, посмотрите всё-таки описания функций в документации
https://dev.mysql.com/doc/refman/5.7/en … tions.html

Неактивен

 

#6 19.04.2017 20:29:33

VARjet
Участник
Зарегистрирован: 19.04.2017
Сообщений: 7

Re: Удалить картинки в тексте

может буду навязчив, но можете показать пример, удаления после и до?

Неактивен

 

#7 19.04.2017 20:43:00

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5827

Re: Удалить картинки в тексте

запрос громоздкий будет, лень писать
попробуйте решать задачу последовательно:
сначала определить позицию первого "<img"  -- locate
вырезать то что до  -- substring
затем определить позицию ближайшего "/>"  -- locate
вырезать то что после  -- substring
склеить первую и вторую часть  -- concat

похожий пример, только с делением по пробелу как раз и разобран по ссылке

Неактивен

 

#8 19.04.2017 20:50:04

VARjet
Участник
Зарегистрирован: 19.04.2017
Сообщений: 7

Re: Удалить картинки в тексте

логику понял, будем пробовать! Спасибо.

Отредактированно VARjet (19.04.2017 20:50:20)

Неактивен

 

#9 20.04.2017 02:39:22

VARjet
Участник
Зарегистрирован: 19.04.2017
Сообщений: 7

Re: Удалить картинки в тексте

а вот такой метот подойдёт?

UPDATE `posts`
SET `column` =
  CONCAT(
        SUBSTRING(`column`
                  FROM 1
                  FOR LOCATE('<img',
                             LOWER(`column`)
                            ) - 1
                 ),
        SUBSTRING(`column`
                  FROM LOCATE('/>',
                              LOWER(`column`),
                              LOCATE('<img',
                                     LOWER(`column`)
                                    ) - 1
                             ) + 2
             )
        )
WHERE LOCATE('<img',
             LOWER(`column`)
            )
;

Неактивен

 

#10 20.04.2017 09:04:32

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5827

Re: Удалить картинки в тексте

практика - критерий истины
проще выполнить и один раз увидеть, чем 100 услышать

Неактивен

 

#11 20.04.2017 17:23:45

VARjet
Участник
Зарегистрирован: 19.04.2017
Сообщений: 7

Re: Удалить картинки в тексте

Работает smile

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson