Мне необходимо посчитать средний рейтинг записи. Подскажите, может кто подскажет как правильно организовать выборку из базы.
Реализованы отзывы в виде кастомного типа записей (reviews), при создании поста (review), указывается рейтинг от 1 до 5 (произвольное поле rating) и автоматически указывается ID поста которому принадлежит отзыв (произвольное поле post_parent). Далее для вывода отзывов я просто делаю выборку:
array(
'post_type' => 'reviews',
'posts_per_page' => 10,
'meta_query' => array(
array(
'key' => 'post_parent',
'value' => $post->ID,
)
)
);
Тут все понятно. Но если мне нужно посчитать средний рейтинг поста, тут мне не понятно каким образом это можно сделать? Я так понимаю что мне необходимо общую сумму произвольных полей rating разделить на кол-во отзывов. Но мне не понятно как мне получить общую сумму полей rating, для определенного поста?
Есть функция по рейтингу woocommerce, что то примерно такое же нужно но для постов, не понимаю как правильно сделать запрос в базу.
/**
* Возвращает результаты рейтинга (отзывов в WooCommerce) сгрупированный по оценкам
*
* @param int $post_id идентификатор поста
*
* @return array массив объектов, где каждый объект - сгрупированные данные по одной из оценок
*/
function get_cnt_rating_reviews_one_product( $post_id ){
global $wpdb;
return $wpdb->get_results( $wpdb->prepare(
"
SELECT COUNT(meta.meta_id) as num, meta.meta_value
FROM $wpdb->comments as comments
INNER JOIN $wpdb->commentmeta as meta ON comments.comment_ID = meta.comment_id
WHERE comments.comment_post_ID = %d AND meta_key = 'rating'
GROUP BY meta.meta_value;
",
$post_id
) );
}
// использование
get_cnt_rating_reviews_one_product( 4350 );