0

簡単に言えば、PhpMyAdminでそれを試してみます:

wp_postmeta.meta_value = wp_posts.id を更新します。

wp_posts.post_name=articles.image

および wp_posts.post_type=添付ファイル

および wp_postmeta.meta_key=_thumbnail_id

このMySQLクエリによって:

update wp_postmeta m
join articles a on (m.post_id = a.id)
join wp_posts p on (m.post_id = p.ID)
set m.meta_value = p.ID
where p.post_name=a.image
AND a.image != NULL
AND p.post_type='attachment'
AND m.meta_key='_thumbnail_id'

それは機能しますが、影響を受ける行はありません! 誰でも助けることができますか?

4

2 に答える 2

1

この文:

AND a.image != NULL

は常に に評価されunknownます。Andwhere句は、そうでない行を除外しますtrue。したがって、 aは と のwhere両方unknownを除外しfalseます。代わりにこれを試してください:

AND a.image is not null

詳細については、このウィキペディアの記事を参照してください。

于 2012-04-08T10:05:08.190 に答える
1

Andomar の回答でサブクエリを使用します。update および delete ステートメントで結合を使用するのは良くありません。

それは次のようなものでなければなりません

UPDATE wp_postmeta m SET m.meta_value = (SELECT p.ID FROM wp_posts p, articles a 
WHERE m.post_id=p.ID AND m.post_id = a.id AND a.image IS NOT NULL 
   AND p.post_type='attachment' AND p.post_name=a.image) 
WHERE m.meta_key='_thumbnail_id'

最初にバックアップしてください!私はこれをテストしませんでした。

うまくいかない場合は、選択できる場合は選択クエリを実行してみてください。選択されない (おそらく選択されない) 場合は、設計に対応するクエリの構造を確認してください。

SELECT m.meta_value, (SELECT p.ID FROM wp_posts p, articles a 
WHERE m.post_id=p.ID AND m.post_id = a.id AND a.image IS NOT NULL 
   AND p.post_type='attachment' AND p.post_name=a.image)  AS pID
FROM wp_postmeta m
WHERE m.meta_key='_thumbnail_id'

また、最初のクエリも試してください

SELECT m.meta_value, p.ID AS pID FROM wp_postmeta m
INNER JOIN articles a on (m.post_id = a.id)
INNER JOIN wp_posts p on (m.post_id = p.ID)
WHERE p.post_name=a.image
AND a.image IS NOT NULL
AND p.post_type='attachment'
AND m.meta_key='_thumbnail_id'

問題を見つけるために、選択クエリをいじったり変更したりしてみてください。

于 2012-04-08T10:15:20.940 に答える