2016-11-12 6 views
-1

и заблаговременно за любую помощь. Я работаю над исправлением всех неработающих ссылок в массивной базе данных многозадачности WordPress и вам нужна помощь в написании SQL-запроса для запуска через PHP MyAdmin. Я искал, но не может идеальное решение ...Нужна помощь по SQL-запросам: как искать и заменять конкретный текст LIKE x И НЕ НРАВИТСЯ xx

ПРОБЛЕМА: У нас есть более тысячи битых ссылок, которые начинаются с HTTP:/вместо HTTP: //

CHALLENGE: Следующий будет результатом многочисленных связей, начиная с http:///

UPDATE wp_1_posts 
    SET post_content = replace (post_content, 
    'http:/', 
    'http://'); 

ПРОЦЕССА: Я хочу написать запрос, чтобы выбрать все эти ссылки первый, так что я могу рассмотреть их, чтобы гарантировать, что я не делаю каких-либо повреждений при замене строки текста. Загрузка дампа db и выполнение руководства S & R не является вариантом, так как мы говорим о базе данных с несколькими гигабайтами.

Я думал, что-то, как это будет работать ...

SELECT * FROM wp_1_posts 
    WHERE post_content LIKE '%http:/%' 
    AND WHERE post_content NOT LIKE '%http://%' 

Но это просто бросает синтаксическую ошибку. Я даже близко?

ВОПРОС № 1: Как найти все экземпляры «http: /», не возвращая все экземпляры «http: //» в результатах запроса.

ВОПРОС # 2: Как я могу безопасно исправить все экземпляры «http: /», не затрагивая строки «http: //».

FYI: Я признаю, что достаточно знаю об этом, чтобы быть опасным, и я не знаком с регулярными выражениями. в. все. Вот почему я обращаюсь к вам за помощью. Еще раз спасибо!

+0

Второй 'WHERE' должны быть удалены. У вас есть предложение where с несколькими условиями. Это базовый синтаксис SQL, а не специфический для MySQL, не говоря уже о Wordpress, MyAdmin или multisite. – GolezTrol

+0

Одним из возможных решений может быть первое обновление 'http: //' to 'http: /'. После этого вы можете снова заменить 'http: /' на 'http: //'. Это простое решение, если вы не знакомы с регулярным выражением, и большинство URL-адресов в любом случае неверны. Если только 10 в миллионе ошибаются, то это неправильный путь, так как вы сначала сломаете их все. – GolezTrol

+0

@GolezTrol Спасибо за быстрый ответ! Следующий вернулся и пустой результирующий набор, хотя приложение, которое я использовал, чтобы найти плохие ссылки выявлены многочисленные HTTP:/URLs ... SELECT * FROM wp_1_posts ГДЕ POST_CONTENT LIKE '% HTTP: /%' И POST_CONTENT не нравится " % http: //% ' – jcnjr

ответ

0

Это должно работать в MYSQL:

UPDATE wp_1_posts SET post_content = replace(post_content,'http:/', 'http://') 
WHERE post_content REGEXP 'http:/[^/]' 

 Смежные вопросы

  • Нет связанных вопросов^_^