Saya perlu mendapatkan banyak posting dengan metadata mereka. Tentu saja Anda tidak bisa mendapatkan metadata dengan kueri posting standar, jadi Anda umumnya harus melakukan a get_post_custom()
untuk setiap posting.
Saya mencoba dengan satu permintaan khusus, seperti ini:
$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'
");
Tampaknya bekerja. Itu naik jika Anda menggunakan salah satu bidang meta dengan cara yang memungkinkan beberapa nilai meta untuk itu pada posting yang sama. Saya tidak bisa memikirkan bergabung untuk melakukan itu.
Jadi, pertanyaan 1: Apakah ada gabungan, sub-kueri, atau apa pun, untuk memasukkan bidang meta bernilai ganda?
Tetapi pertanyaan 2: Apakah itu sepadan? Berapa banyak postmeta
gabungan tabel yang saya tambahkan sebelum pendekatan 2-kueri lebih disukai? Saya bisa mengambil semua data pos dalam satu kueri, lalu mengambil semua postmeta yang relevan di yang lain, dan menggabungkan meta dengan data posting dalam satu resultset di PHP. Apakah itu akhirnya menjadi lebih cepat daripada satu query SQL yang semakin kompleks, jika itu mungkin?
Saya selalu berpikir, "Berikan sebanyak mungkin pekerjaan ke basis data." Tidak yakin dengan yang ini!
get_posts()
, lalu get_post_meta()
untuk setiap orang? @ MannyFleurmond, sulit untuk menemukan info sulit tentang caching bawaan WP, tetapi AFAIK akan menyimpan hal-hal cache per permintaan. Panggilan ke server untuk mengambil data ini adalah panggilan AJAX, dan saya tidak berpikir hal lain akan mengambil hal-hal sebelumnya.