Есть запрос:
$querystr= "SELECT ID
FROM $wpdb->posts
LEFT JOIN $wpdb->postmeta v1 ON (id = v1.post_id)
LEFT JOIN $wpdb->postmeta v2 ON (id = v2.post_id)
LEFT JOIN $wpdb->postmeta v3 ON (id = v3.post_id)
WHERE post_status = 'publish'
AND ( v1.meta_key = 'meta_key1' AND v1.meta_value = '$meta_value1' )
AND ( v3.meta_key = 'meta_key3' AND v3.meta_value = '$meta_value2' )
AND v2.meta_key = 'meta_key2'
ORDER BY post_date DESC";
$ter = $wpdb->get_results($querystr, ARRAY_A);
Необходимо получить все посты соответствующие запросу.
Как можно упростить?
Affected Rows 124 Time 0,9295
Посты в выборке могут быть из разных категорий с разными метками(возможности составить список нет).
Буду благодарен за любую помощь (хоть скажите в каком направлении капать).
Заранее спасибо.
После немного обдумав решил что поскольку нужно только id, то подключать таблицу posts не имеет смысла.
Запрос преобразован:
SELECT p1.post_id
FROM wp_postmeta p1
JOIN wp_postmeta p2 ON p1.post_id = p2.post_id
AND p1.meta_key = 'meta_key1'
AND p2.meta_key = 'meta_key2'
WHERE p1.meta_value = '$meta_value1'
ORDER BY p2.meta_value +0 DESC
LIMIT 10000
Но в любом случае долго...