メタデータを含む多数の投稿を取得する必要があります。もちろん、標準の投稿クエリを使用してメタデータを取得することはできないため、通常は投稿get_post_custom()
ごとにを行う必要があります。
次のようなカスタムクエリを1つ試しています。
$results = $wpdb->get_results("
SELECT p.ID,
p.post_title,
pm1.meta_value AS first_field,
pm2.meta_value AS second_field,
pm3.meta_value AS third_field
FROM $wpdb->posts p LEFT JOIN $wpdb->postmeta pm1 ON (
pm1.post_id = p.ID AND
pm1.meta_key = 'first_field_key'
) LEFT JOIN $wpdb->postmeta pm2 ON (
pm2.post_id = p.ID AND
pm2.meta_key = 'second_field_key'
) LEFT JOIN $wpdb->postmeta pm3 ON (
pm3.post_id = p.ID AND
pm3.meta_key = 'third_field_key'
)
WHERE post_status = 'publish'
");
動作しているようです。同じ投稿で複数のメタ値を許可する方法でこれらのメタフィールドのいずれかを使用すると、トリップします。私はそれを行うための結合を考えることはできません。
したがって、質問1:複数値のメタフィールドを取り込むための結合、サブクエリ、その他はありますか?
しかし、質問2:それは価値がありますか?どのように多くのpostmeta
2-クエリアプローチが良好となる前に、私は追加しないテーブルを結合?あるクエリですべての投稿データを取得してから、関連するすべてのポストメタを別のクエリで取得し、PHPで1つの結果セットでメタと投稿データを結合することができます。それが可能であれば、それは単一のかつてないほど複雑なSQLクエリよりも速くなるでしょうか?
私はいつも「できる限り多くの作業をデータベースに与える」と考えています。これはわかりません!
get_posts()
、その後、get_post_meta()
それらの一つ一つのために?@ MannyFleurmond、WPのビルトインキャッシングに関するハード情報を見つけることは困難ですが、リクエストごとにキャッシュすることはわかっています。このデータを取得するためのサーバーへの呼び出しはAJAX呼び出しであり、他のものがその前に何かを取得することはないと思います。