Necesito obtener un montón de publicaciones con sus metadatos. Por supuesto, no puede obtener metadatos con una consulta de publicaciones estándar, por lo que generalmente tiene que hacer un get_post_custom()
para cada publicación.
Estoy intentando con una consulta personalizada, como esta:
$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'
");
Parece que funciona. Se dispara si usas cualquiera de esos campos de metadatos de una manera que permita múltiples valores de metadatos para ellos en la misma publicación. No puedo pensar en una unión para hacer eso.
Entonces, pregunta 1: ¿hay una combinación, subconsulta o lo que sea, para traer metacampos de múltiples valores?
Pero la pregunta 2: ¿Vale la pena? ¿Cuántas combinaciones de tablas postmeta
debo agregar antes de que sea preferible un enfoque de 2 consultas? Podría capturar todos los datos de publicación en una consulta, luego capturar toda la publicación relevante en otra y combinar el metadatos con la información de publicación en un conjunto de resultados en PHP. ¿Acaso eso terminaría siendo más rápido que una sola consulta SQL cada vez más compleja, si es posible?
Siempre pienso: "Dar tanto trabajo como sea posible a la base de datos". No estoy seguro de esto!