1

ここで、PhpMyAdmin で次のクエリを試して、wp_posts の値で wp_postmeta を更新します。

UPDATE wp_postmeta
SET meta_value = (SELECT DISTINCT id FROM wp_posts) 
WHERE EXISTS (select 1 
              from wp_posts 
              join articles on wp_posts.post_name=articles.image)
    AND (wp_posts.post_type='attachment') 
    AND (wp_postmeta.meta_key='_thumbnail_id' )

しかし、私にそのエラーを与えました: #1054 - 不明な列 'wp_posts.post_type' in 'where clause' !

私は利益なしでそれを変更しようとしています、誰でも助けることができますか?

4

2 に答える 2

1
AND (wp_posts.post_type='attachment') 

ここでの本当の問題は、 wp_posts を参照している唯一の場所が EXISTS および SET サブクエリにあることだと思います。WHERE 句のその部分 (上記で引用) は、サブクエリの範囲外にあり、それについて認識していません。

EXISTS サブクエリを次のようにするつもりでない限り:

(select 1 
 from wp_posts 
 join articles on wp_posts.post_name=articles.image
 WHERE wp_posts.post_type='attachment')

この場合、wp_posts は同じ括弧のセットで参照されており、構文的に正しいです。これはおそらくあなたが求めているものを与えないので、代わりにこれを試してください:

UPDATE wp_postmeta
INNER JOIN wp_posts ON wp_posts.id = wp_postmeta.post_id
SET meta_value = (SELECT DISTINCT id FROM wp_posts WHERE [some condition]) 
WHERE EXISTS (select 1 
          from wp_posts 
          join articles on wp_posts.post_name=articles.image)
    AND (wp_posts.post_type='attachment') 
    AND (wp_postmeta.meta_key='_thumbnail_id' )

注 #1: wp_postmeta テーブルには、wp_posts の id に対応する post_id フィールドがあると想定しています。

注#2:OMG Poniesが述べたように...

SET meta_value = (SELECT DISTINCT id FROM wp_posts) 

この行は、1 しか期待されていない複数の値を返すため、ほとんどの場合エラーをスローします。上記で「WHERE [何らかの条件]」を追加したことに注意してください。ここに独自の WHERE 句を追加する必要があります。また、サブクエリの結果を 1 つだけに制限するものにする必要があります。

于 2012-04-07T14:38:11.113 に答える
0

右括弧を次の場所に移動する必要があります。

(SELECT DISTINCT id FROM wp_posts)

声明の最後まで。

于 2012-04-07T14:33:30.433 に答える