Пишу рейтинг для своего сайта.
На одной странице у меня отображается 50 новостей разом.
В бд запросами "срать" не хочется.
Пытаюсь все реализовать одним запросом. Пока не выходит.
Дошел до такого запроса и встал. В поисковиках на эту тему ничего не нашел, может быть не в той стороне искал.
Мой запрос:
SELECT
*
FROM
( # открываем подзапрос для того, что бы после конечной группировки видеть, голосовал ли пользователь в за эту новость или нет
SELECT
*,
IF(`ip` = '192.168.1.1', `ip`, 0) as UserIP # добовляем дополнительное поле, которое при нужном нам ip будет заполненено, во всех остальных случаях будет = 0
FROM
`news`
WHERE
`id` IN (14,15,17,18,26) # важно находить среднее арифметическое для нескольких новостей сразу
ORDER BY `UserIP` DESC # UserIP всегда вверху (для группировки)
) AS rating
GROUP BY
`id` # Группируем, что бы на каждую новость было по одной строчке
;
И теперь я ума не приложу как сюда впендорить функцию avg(), если я ее ставлю, она считается по всем новостям, а мне нужно для каждой новости свою avg()