0

すべての投稿タイトルの前に静的な単語があります。投稿タイトルに 2 つの異なる静的な単語を含む 9000 件以上の投稿が公開されています。私はすべての投稿からこの単語を削除しようとしています。

本質的に、私はその一定の単語を削除する方法を探しています. ワードプレスでエクスポートして投稿タイトルを編集してみましたが、ファイルが100MB以上あり、開けません。

私は SQL/phpmyadmin に目を向けましたが、SQL クエリに精通しておらず、データベースを台無しにしたくありません。

「定数」は常にタイトルの最初の単語です。代わりにmysqlに最初のスペースを検出させ、その前のすべてを削除し、スペースを含めるにはどうすればよいですか。基本的に、最初の単語を削除します。基本的に、私は複数の定数を持っているので、文字列の最初のスペースを見つけて、それとその前のすべてを削除できればもっと良いでしょう。sub_string か何かを使用すると仮定しています。

これがタイトル構成

その他の定数はこちら

そのため、「定数」とスペースを見つけて「」に置き換える検索クエリがある場合、それを完全に削除することができます。検索と置換のクエリにできればいいので、後で活用できます。

データベース・テーブル・カラムの情報

テーブルが呼び出され、その値がで、タイトルが列にある場合wp_posts、テーブルの値に制限する必要がありますpost_typepostpost_title

どんな助けでも大歓迎です。

4

2 に答える 2

1

Search RegExは、grep またはプレーン テキストを使用して、すべての投稿およびページ コンテンツ、投稿タイトル、投稿メタなどを検索および置換できる優れたプラグインです。カスタム投稿タイプは検索しません。

このプラグインまたはデータベースでの直接クエリを使用して、変更を行う前に DB をバックアップしてください。

ドキュメント: http://urbangiraffe.com/plugins/search-regex/

于 2013-02-24T06:07:23.190 に答える
1

MySQL には、探しているものが正確にはありません。はい、REPLACE()文字列関数はありますが、単一の置換に限定することはできません。そのため、タイトル文字列に表示される可能性のあるこの定数の他のオカレンスを誤って置き換える可能性があります。

私見ですが、最も簡単な方法は、定数で始まるすべてのタイトルを見つけて、最初のタイトル (つまり、文字列の先頭) を置き換えることです。

UPDATE wp_posts
SET post_title = 
MID( post_title, LENGTH('Constant ')+1 )
WHERE post_title LIKE 'Constant %'
AND post_type = 'post';

+1MySQL 文字列オフセットは 0 ではなく 1 から始まるため、 が必要です。

個人的には、念のため、同等の SELECT を最初に実行することを常に好みます (何年も MyISAM なしでBEGIN WORK):

SELECT post_title,
MID( post_title, LENGTH('Constant ')+1 ) AS replacedTitle 
FROM wp_posts
WHERE post_title LIKE 'Constant %'
AND post_type = 'post';

または、常に最初の単語 (つまり、最初のスペースまで) を削除したい場合は、次のステートメントが機能するはずです

UPDATE wp_posts
SET post_title = 
MID( post_title, POSITION( ' ' IN post_title )+1 )
WHERE post_type = 'post';

スペースが見つからない場合は 0 を返すためPOSITION()、このステートメントは通常、ノーオペレーション (つまり、非破壊的) になります。

于 2013-02-24T01:04:56.893 に答える