1

データベースにターゲットWebサイトから2つのテーブルがあり、投稿サムネイル行を取得する必要があります。1つのテーブルはwp_postsで、もう1つはwp_postmetaです。標準のWordpressエクスポートには注目の画像が含まれていないため、自分で取得するつもりでした。wp_postsにはすべての投稿が含まれ、注目の画像も一種の投稿であり、このテーブルに保存されます。wp_postmetaテーブルには、投稿IDにリンクされたさまざまなメタデータが含まれており、_thumbnail_idキーの値は投稿タイプ「添付ファイル」のIDです。以下のクエリは、私が言おうとしていることを少し明確にします。

Select * From wp_posts 
Where ID In (Select meta_value 
    From wp_postmeta 
    Where meta_key='_thumbnail_id' 
    And post_id In (Select ID From wp_posts 
        Where post_type='$post_type'));

また、wp_postには約1万行が含まれ、wp_postmetaには約7万行が含まれます。助けてくれてありがとう。また、サムネイル付きの特定の投稿タイプを、あるワードプレスのインストールから別のインストールに移行する方法を教えていただければ幸いです。

4

1 に答える 1

1

INネストされた句がパフォーマンスの問題の原因である可能性が高いと思います。post_typeWordPressは、1)の1つの行としてあなたの投稿を保存しwp_posts、2)の別の行としてサムネイルの「添付ファイル」を含みwp_posts、3)の添付ファイルのメタデータを含むため、適度に複雑なクエリが必要wp_postmetaです。INネストされたsを使用する理由は確かですが、 INsは特に効率的ではありません。

クエリは機能しますが、データベースを使用すると、メモリまたは時間、あるいはその両方が不足している可能性があります。はるかに小さい私のDBでは、クエリは0.0123秒で実行されます。次のクエリは、クエリの結果を正確に複製し、0.0006秒で実行されます。

SELECT children.*
FROM wp_posts as children
JOIN wp_posts as parents on parents.ID = children.post_parent
WHERE children.ID IN (
    SELECT meta_value
    FROM wp_postmeta
    WHERE post_id = parents.ID
    AND meta_key='_thumbnail_id'
) 
AND parents.post_type='{$post_type}'

DBから4行が返されることを考えると、実行の大きな違いがわかります。

次のクエリは上記のクエリ(0.0013秒)よりもそれほど遅くはありませんが、前のクエリでは返されない行(私の場合は1つ余分)を返し、それでもあなたのクエリよりも何倍も高速です。欲しいクエリだと思います。

SELECT *
FROM wp_posts as children
JOIN wp_posts as parents on parents.ID = children.post_parent
JOIN wp_postmeta ON parents.ID = wp_postmeta.post_id
AND wp_postmeta.meta_key = '_thumbnail_id'
AND children.post_type = 'attachment'
AND parents.post_type = '{$post_type}'
于 2012-12-23T18:11:59.653 に答える