Оптимизация запроса к бд
Добрый день.
Получаю id товаров сайта:
global $wpdb; $postids = $wpdb->get_results("SELECT ID FROM $wpdb->posts WHERE post_type='product' AND post_status = 'publish' ORDER BY ID ASC");
Затем получаю метаполя у каждой записи:
foreach( $postids as $postid ){ $postid = $postid->ID; $val = get_post_meta( $postid, 'price', true ); if ( $val != '' ) { $params[] = $val; } }
Плагин "Query Monitor" показывает на странице вывода фильтра 1000 SQ запросов (столько у меня товаров в таксономии).
Как скопом получить значение метаполя с ключом "price" у всех записей из определенной таксономии? Они должны быть массивом.
Тебе нужно сделать запрос прямо в таблицу метаданных записей, с вложенным в него подзапросом, который найдет нужные ID записей...
Подзапрос можно упростить и получить значение поля object_id из таблицы wp_term_relationships, при этом вообще не обращаясь к таблице wp_posts. Для этого нужно будет объеденить две таблицы wp_term_relationships и wp_term_taxonomy:
Как устроена структура таксономий и связь с записями смотри в статье о таксономиях.
Делаю так:
К сожалению выдает пустые массивы
Попробуй запустить подзапрос отдельно и отдельно сам запрос, где-то ошибка, найди её...
Как-то так получилось:
Запросов сразу меньше стало с 1000 до 104
Ответ сервера снизился с 620 ms до 500
Ответ сервера, думаю больше от хостинга чем от вордпресс зависит... ты пообновляй страницу где тестиш эти значения, увидишь что они прыгают и не только в пределах нескольких десятков мс.