LINUX.ORG.RU
ФорумAdmin

SQL запрос в PHPMyAdmin

 ,


0

1

Обычно я делаю так:

UPDATE wp_posts SET post_content = REPLACE (post_content, 'что.менять', 'чем.заменить');

Однако такие же имена есть в файлах, и сквозная замена содержимого постов затрагивает и ссылки на .jpg .

Предварительно переименовать что.менять.jpg не представляется возможным, так как имена файлов содержат:

что.менять.jpg
что.менять01.jpg
что.менять100500.jpg
бла-бла-что.менять.jpg

не хотелось бы озабочиваться ещё и рекурсивным переименованием всех файлов на хостинге.

В SQL я 0 (скорблю, буду учиться, как и многому другому), подскажите плиз, может как-то можно исключить из запроса те 'что.менять', которые находятся внутри тэгов IMG, URL? Или рядом с ".jpg" ?

Если я правильно понял, что нужно именно исключение по маске то:
Что-то типа where (not post_content like '%чтоисключить1%') and (not post_content like '%чтоисключить2%') где символ % это замена любых символов. Т.е. не берите мой пример как за основу, напишите сами что вам нужно, и не забывайте про регистр для регистронезависимости можно написать lower(post_content)
Но лучше когда точно можно сформулировать запрос на основе where без исключения ( not)
В любом случае сначала проверяйте select-ом и только потом натравливайте update.

anc ★★★★★
()
Ответ на: комментарий от anc

А можете привести пример? Моих знаний не хватает для применения рекомендации( Куда вставлять вашу конструкцию, Как оформить селект.. Сорри, нуб.

hikikomori ★★★
() автор топика

Или рядом с ".jpg" ?

UPDATE wp_posts SET post_content = REPLACE (post_content, 'что.менять.jpg', 'чем.заменить.jpg');



которые находятся внутри тэгов IMG, URL?

покажи реальный пример что нужно менять и когда возникает конфликт, тогда можно придумать условия

kiotoze ★★★★
()
Ответ на: комментарий от hikikomori

Куда вставлять вашу конструкцию

В конец

Как оформить селект

Пишем select * from wp_posts where условия
Выполняем запрос, смотрим результат выборки, если результат с заданным условием устраивает, то тогда уже выполняем update с этим же условием.

anc ★★★★★
()
Ответ на: комментарий от kiotoze

Я вроде бы описал в первом посте... Надо заменить Фамилия на Фамилиё, но дело в том, что есть ещё Фамилия.jpg, Фамилия1..111.jpg, Имя-Фамилия.jpg которые трогать не надо, иначе побьются ссылки.

hikikomori ★★★
() автор топика
Ответ на: комментарий от hikikomori

Напишите скрипт на php где идет обработка каждой записи, медленно не верно

ism ★★★
()

Не умеет mysql делать таких выкрутасов со строками. Там есть regexp, но он работает по принципу соответствует/не соответствует, да и ковыряния в строках не совсем сфера задач СУБД. Хотя можно приделать плагинов. (http://www.mysqludf.org например с preg: https://github.com/mysqludf/lib_mysqludf_preg). Попробуй примеры с гитхаба, если у тебя на хостинге такой плагин есть, то можно будет написать регулярку.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 4)
Ответ на: комментарий от crutch_master

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

hikikomori ★★★
() автор топика
Ответ на: комментарий от crutch_master

И спасибо за рекомендацию. Возможно когда-нибудь я смогу её применить. Пока могу лишь задать вопрос - если «ковыряния в строках не совсем сфера задач СУБД», то может проще поручить это скрипту на php и мучать попуPHPMyAdmin?

hikikomori ★★★
() автор топика
Ответ на: комментарий от hikikomori

может проще поручить это скрипту на php...?

Проще, но, как уже сказали, будет тормозно. Хотя, может и так сойдет.
Попробуй вот этот:

SELECT CONVERT( PREG_REPLACE( '/fox/i' , 'dog' , 'The brown fox' ) USING UTF8) as replaced;
Запрос выполнить. Если mysql выругается, то пили на php.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от hikikomori

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

anc ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.