gikami
@gikami
web программист

Как суммировать данные при их нахождении в sql одним запросом?

Есть первая база со статьями и вторая с дополнительными данными (Статистика, теги и т д).
Я делаю вывод по рейтингу и появилась проблема с оптимизацией запроса (Не знаю даже как загуглить).
Как сделать так, чтобы не делать доп запросы для rating и rating_count и вывести их из запроса postmeta и использовать для подсчета и сортировки?
SELECT * , 
//Тут я вычисляю сам рейтинг для сортировки и как эти данные взять без доп запросов?
(sum(rating.meta_value*rating_count.meta_value)/sum(rating_count.meta_value)) AS rating_sum) 

FROM posts 
//В этом запросе по сути есть данные все, которые нужны
INNER JOIN postmeta ON (posts.ID = postmeta.post_id)

//Но приходится делать еще один запрос, чтобы получить значение рейтинга
INNER JOIN postmeta AS rating
ON ( posts.ID = rating.post_id )

//Здесь запрос на количество поставленных оценок
INNER JOIN postmeta AS rating_count
ON ( posts.ID = rating_count.post_id )

WHERE
//Тут небольшой критерий и по сути поиск значений по ключу
(rating.meta_key = 'post_rating' AND rating.meta_value >= 2) AND 
(rating_count.meta_key = 'post_rating_count' AND rating_count.meta_value > 1)

В postmeta сохраняются данные post_id - Ид статьи, meta_key - Ключ параметра, meta_value - Значение параметра.
  • Вопрос задан
  • 100 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы