Tôi cần nhận được một loạt các bài đăng với siêu dữ liệu của họ. Tất nhiên, bạn không thể nhận được siêu dữ liệu với truy vấn bài viết tiêu chuẩn, do đó bạn thường phải thực hiện một get_post_custom()
cho mỗi bài đăng.
Tôi đang thử với một truy vấn tùy chỉnh, như thế này:
$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'
");
Có vẻ để làm việc. Nó tăng lên nếu bạn sử dụng bất kỳ trường meta nào theo cách cho phép nhiều giá trị meta cho nó trên cùng một bài. Tôi không thể nghĩ đến việc tham gia để làm điều đó.
Vì vậy, câu hỏi 1: Có tham gia, truy vấn phụ hoặc bất cứ điều gì, để mang lại các trường meta nhiều giá trị không?
Nhưng câu hỏi 2: Có đáng không? postmeta
Tôi thêm bao nhiêu phép nối bảng trước khi tiếp cận 2 truy vấn trở nên thích hợp hơn? Tôi có thể lấy tất cả dữ liệu bài đăng trong một truy vấn, sau đó lấy tất cả các postmeta có liên quan trong một truy vấn khác và kết hợp meta với dữ liệu bài đăng trong một tập kết quả trong PHP. Điều đó sẽ kết thúc nhanh hơn một truy vấn SQL phức tạp hơn bao giờ hết, nếu điều đó thậm chí có thể?
Tôi luôn nghĩ: "Hãy giao càng nhiều công việc càng tốt cho cơ sở dữ liệu." Không chăc lăm vê cai nay!
get_posts()
, sau đó get_post_meta()
cho mỗi một trong số đó? @MannyFleurmond, thật khó để tìm thấy thông tin khó về bộ nhớ đệm tích hợp của WP, nhưng AFAIK nó sẽ lưu trữ nội dung theo yêu cầu. Cuộc gọi đến máy chủ để lấy dữ liệu này là cuộc gọi AJAX và tôi không nghĩ rằng bất cứ điều gì khác sẽ lấy thứ đó trước nó.