Preciso receber várias postagens com seus metadados. É claro que você não pode obter metadados com uma consulta de postagens padrão; portanto, você geralmente precisa fazer um get_post_custom()
para cada postagem.
Estou tentando com uma 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 funcionar. Ele dispara se você usar qualquer um desses meta-campos de uma maneira que permita vários valores-meta na mesma postagem. Não consigo pensar em uma junção para fazer isso.
Então, pergunta 1: existe uma junção, subconsulta ou qualquer outra coisa para trazer metacarpos de valores múltiplos?
Mas pergunta 2: vale a pena? Quantas postmeta
associações de tabela adiciono antes que uma abordagem de 2 consultas se torne preferível? Eu poderia pegar todos os dados de postagem em uma consulta, depois pegar todos os postmeta relevantes em outra e combinar a meta com os dados de postagem em um conjunto de resultados em PHP. Isso acabaria sendo mais rápido que uma única consulta SQL cada vez mais complexa, se isso é possível?
Eu sempre penso: "Dê o máximo de trabalho possível ao banco de dados". Não tenho certeza sobre este!
get_posts()
, então get_post_meta()
para cada um deles? @MannyFleurmond, é difícil encontrar informações difíceis sobre o cache interno do WP, mas o AFAIK armazenaria em cache as informações por solicitação. A chamada para o servidor para coletar esses dados é uma chamada AJAX, e acho que nada mais estará pegando coisas antes dela.