2017-01-17 14 views
1

これは、特定のワードプレスではありませんが、それは私が働いているWPのDB ...一括更新MySQLのテーブルは

私はpostsテーブル値を更新する必要がありますということは注目に値しますpost_titlepost_type='appearance'のすべてのエントリについて現在のpost_titleは、希望する名前で始まりますが、 "appearance [some#]"で終わります。したがって、「外観」から最後までを削除する必要があり、テーブルpostmetameta_valueと置き換える必要があります。とpost_idpostsテーブルのIDと同じです。

たとえば、ID「102」の投稿があり、「John Doe appearance 102」というタイトルがあります。 postmetaテーブルでは、meta_key = _place_idpost_id = 102,meta_value = 108です。したがって、最終結果はpost_title = John Doe 108になります。

これは私以外は複雑ですが、参加が必要だと思います。そして、私は2つの別々のクエリが理にかなっていると考えます。だから、のようなもの:あなたはSUBSTRING_INDEX()を使用することにより、単一のクエリでこれを行うことができます

UPDATE posts 

SET post_title = TRIM(TRAILING ' appearance %' FROM post_title) 

WHERE post_type='appearance' 

UPDATE posts 

left join postmeta on 
    posts.ID= postmeta.post_id 
set 
    posts.post_title = CONCAT(posts.post_title, " ", postmeta.meta_value WHERE postmeta.meta_key = '_place_id') 

答えて

1

UPDATE posts p 
LEFT JOIN postmeta pm 
    ON p.ID = pm.post_id 
SET p.post_title = CONCAT(SUBSTRING_INDEX(p.post_title, 'appearance', 1), pm.meta_value) 
WHERE pm.meta_key = '_place_id' 

SUBSTRING_INDEX('John Doe appearance 102', 'appearance', 1)を取るには、前にすべてを返しますappearanceの出現(John Doe(最後にスペースを含む))は、 。次に、meta_valueで簡単に連結することができます。

+0

それは素晴らしいですね。悲しいことに、エラーが発生しました: 'ネイティブ関数 'SUBSTRING_INDEX'への呼び出しでパラメータのカウントが正しくありません。 – David

+0

@David申し訳ありませんが、入力ミスが修正されました。 –

+0

ありがとうございます。綺麗な。行方不明だったがうまくいたことの1つは、post_typeを指定することでした。 – David