Ich brauche eine Reihe von Posts mit ihren Metadaten. Natürlich können Sie mit einer Standardpost-Abfrage keine Metadaten abrufen, daher müssen Sie in der Regel eine get_post_custom()
für jeden Post durchführen.
Ich versuche es mit einer benutzerdefinierten Abfrage, wie folgt:
$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'
");
Scheint zu funktionieren. Es wird ausgelöst, wenn Sie eines dieser Metafelder so verwenden, dass mehrere Metawerte für denselben Beitrag zulässig sind. Ich kann mir keine Verbindung vorstellen, um das zu tun.
Frage 1: Gibt es eine Verknüpfung, Unterabfrage oder was auch immer, um Metafelder mit mehreren Werten einzufügen?
Aber Frage 2: Lohnt es sich? Wie viele postmeta
Tabellenverknüpfungen füge ich hinzu, bevor ein Ansatz mit zwei Abfragen bevorzugt wird? Ich könnte alle Post-Daten in einer Abfrage erfassen, dann alle relevanten Post-Metas in einer anderen und das Meta mit den Post-Daten in einer Ergebnismenge in PHP kombinieren. Wäre das schneller als eine einzelne, immer komplexer werdende SQL-Abfrage, wenn das überhaupt möglich wäre?
Ich denke immer: "Gib der Datenbank so viel Arbeit wie möglich." Ich bin mir nicht sicher!
get_posts()
dann get_post_meta()
für jeden dieser Posts ? @MannyFleurmond, es ist schwer, genaue Informationen über das in WP integrierte Caching zu finden, aber AFAIK würde es Sachen pro Anfrage zwischenspeichern. Der Aufruf an den Server, um diese Daten abzurufen, ist ein AJAX-Aufruf, und ich glaube nicht, dass irgendetwas anderes zuvor Dinge abrufen wird.