2016-11-12 1 views
-1

ありがとうございました。私は大規模なWordPressのマルチサイトデータベース内のすべての壊れたリンクを修正する作業をしており、PHP MyAdmin経由で実行するためのSQLクエリを書く助けが必要です。私が検索したが、完璧なソリューション...SQLクエリのヘルプが必要です:特定のテキストを検索し置換する方法LIKE x AND NOT LIKE xx

PROBLEMすることはできません:/ 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句が1つあります。これは基本的なSQL構文であり、wordpress、MyAdmin、またはmultisiteはもちろんのこと、MySQL特有のものではありません。 – GolezTrol

+0

可能な解決策の1つは、最初に 'http://'を 'http:/'に更新することです。その後、 'http:/'を 'http://'に置き換えることができます。あなたが正規表現に慣れていなくても、大部分のURLが間違っているなら、これは簡単な解決策です。万人のうち10人だけが間違っているとすれば、これは正しい方法ではありません。 – GolezTrol

+0

@GolezTrol迅速な返信をありがとう!返されると、空の次の結果セット、アプリかかわらず、私は識別の悪いリンクを見つけるために使用される多数のhttp:/ URLを... SELECT POST_CONTENT LIKE '%はhttp:/%' wp_1_posts * FROM とPOST_CONTENTは好きでは " %http://% ' – jcnjr

答えて

0

これはMYSQLで、動作するはずです:

UPDATE wp_1_posts SET post_content = replace(post_content,'http:/', 'http://') 
WHERE post_content REGEXP 'http:/[^/]' 
関連する問題