Снова вопрос про запрос с рейтингом

Kostyab

Новичок
Снова вопрос про запрос с рейтингом

Нашел несколько подобных обсуждений, но применить к моему случаю не получилось.
Есть две таблицы:

таблица gallery
---------------------------------------------------------------------
gallery_id | foto_name | foto_post_date | foto_ocenka

где foto_ocenka -- сумма всех оценок, поставленными всеми посетителями.

таблица rating
-----------------------------------
gallery_id | user_id | rating

где rating -- оценка (от 1 до 5), поставленная пользователем user_id

Задача:
- найти последнее лучшее фото,
- где foto_ocenka максимальна и при этом более 20,
- где средняя оценка более 3

Селект пишу так:
PHP:
$result=mysql_query("SELECT g.gallery_id, g.foto_name, g.foto_post_date, MAX(g.foto_ocenka) as mx, ROUND(AVG(r.rating),2) as rt
                     FROM gallery g, rating r
                     WHERE g.gallery_id=r.gallery_id
                     GROUP BY g.gallery_id
                     HAVING mx>20 AND rt>3
                     ORDER BY g.foto_post_date DESC
                     LIMIT 1");
Получаю последнее фото с mx > 20. При этом в базе есть предыдущее фото c mx 40 -- вот его я хочу получить как последнее лучшее фото. То есть максимум не вычисляет.
Где косяк?
 

Andreika

"PHP for nubies" reader
Kostyab
если убрать LIMIT 1 и нужная запись есть в результатах, то надо или условия ужесточить или сортировать по нужному полю.. в данном случае второе

попробуй добавить сортировку сначала по mx и потом уж по foto_post_date
 

Kostyab

Новичок
Да, действительно. Если сделать сортировку сначала по mx, потом по дате получается. Но получилось в результате не то, что задумывалось: из базы выбирается просто фото с наибольшей оценкой. Это моя ошибка постановки задачи.

На самом деле надо делать так:

1) выбирать лучшее на сегодня, то есть
PHP:
$today=date("Y-m-d H:i:s");
...SELECT
...
WHERE g.gallery_id=r.gallery_id AND g.foto_post_date='$today'
...
2) если ничего не выбрано, перейти к "вчера", потом к "позавчера" и так далее, пока искомое фото не будет найдено.

Вот сижу, парюсь как такой цикл написать...
 
Сверху