2016-07-22 16 views
0

WordPressデータベースの特定の条件に一致するすべての投稿のメタ値を更新しようとしています。SQLでWordPressの投稿のメタ値を更新

私は、update_with_falseという名前のテーブルを作成しましたが、各行の「値」はwp_postsテーブルのポストのpost_nameと一致しています。

私がする必要があるのは、update_with_falseテーブルの行と同じ投稿名を持つwp_postsテーブルの各投稿について、 "included_in_related_articles"というメタキーのmeta_valueを "true"に変更することです。ここで

は今、私のSQLですが、私は構文エラーを取得しています:理にかなっている

UPDATE SET wp_postmeta (post_id, meta_key, meta_value) 
select ID, 'included_in_related_articles', 'true' from wp_posts 
WHERE update_with_false.value = wp_posts.post_name 

うまくいけば。更新する必要のあるメタフィールドのスクリーンショットと、作成した余分なテーブルのスクリーンショットを添付しました

ありがとう!

enter image description here enter image description here

答えて

2

あなたの命令が非常に不明確です。

私が正しく理解していれば、あなたはwp_postmeta.meta_valueを更新し、wp_posts.post_nameの値がupdate_with_false.valueに発見された場合に設定します。

最初wp_postmetaテーブルにwp_posts.post_name列に入社し、その後さらにテーブルupdate_with_false を結合して参加しました投稿を制限することによってこれを行うことができます。

私は(この ER diagramから少し助けを借りて)私の頭の上にこれをオフに書いている:

update wp_postmeta pm 
    inner join wp_posts p on p.id = pm.post_id 
    inner join update_with_false x on x.value = p.post_name 
set pm.meta_value = 'true' 
where pm.meta_key = 'included_in_related_articles' 
+0

ありがとう、助けてくれてありがとう、私が必要とするのは、 "included_in_related_articles"メタキーを持つ投稿のみを更新することです。すべての投稿ではありません。 – Christian

+1

更新されたバージョンを参照してください。私は "meta_key"条件を追加しました。 – Bostjan

+2

更新のおかげで、これは動作するように見えますが、300個のうち100,000個の投稿だけが表示されます。私はこれがサーバ上で何か起きて処理されるのを防ぐためだと思います。 – Christian

0

次のようにそれは、サブクエリを使用して行うことができます。

UPDATE `wp_postmeta` SET `meta_value`= 'true' WHERE meta_key = 'included_in_related_articles' AND `post_id` IN (SELECT ID FROM wp_posts AS wps LEFT JOIN update_with_false AS uwf on (wps.post_name = uwf.value)) 

SELECT ID FROM wp_posts AS wps LEFT JOIN update_with_false AS uwf on (wps.post_name = uwf.value)がサブクエリの場合、wp_postsテーブルからカンマ区切りIDが得られます。

関連する問題