ฉันต้องได้รับข้อความมากมายจากเมตาดาต้า แน่นอนว่าคุณไม่สามารถรับเมทาดาทาที่มีแบบสอบถามโพสต์มาตรฐานดังนั้นโดยทั่วไปคุณต้องทำget_post_custom()
สำหรับแต่ละโพสต์
ฉันกำลังลองด้วยข้อความค้นหาที่กำหนดเองหนึ่งรายการเช่นนี้:
$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 คิวรีจะดีกว่า ฉันสามารถดึงข้อมูลโพสต์ทั้งหมดในแบบสอบถามหนึ่งแล้วคว้า postmeta ที่เกี่ยวข้องทั้งหมดในอีกแบบสอบถามและรวมเมตากับข้อมูลโพสต์ในชุดผลลัพธ์หนึ่งใน PHP ว่าจะเร็วกว่าการสืบค้น SQL ที่ซับซ้อนยิ่งขึ้นถ้าเป็นไปได้หรือไม่
ฉันมักจะคิดว่า "ให้ฐานข้อมูลมากที่สุดเท่าที่จะเป็นไปได้" ไม่แน่ใจในอันนี้!
get_posts()
แล้วget_post_meta()
สำหรับทุกคนหรือไม่ @ DannyFleurmond มันยากที่จะหาข้อมูลที่ยากในการแคชในตัวของ WP แต่ AFAIK มันจะแคชสิ่งต่าง ๆ ตามคำขอ การโทรไปยังเซิร์ฟเวอร์เพื่อรับข้อมูลนี้เป็นการโทร AJAX และฉันไม่คิดว่าจะมีอะไรอื่นมาหยิบอีกต่อไป