Задавайте вопросы, мы ответим
Вы не зашли.
Проблема такая : хочу чтобы на сайте отображались лучшие фотки за каждый день , то есть чтобы был вывод фоток по дням и за каждый день отобразить лишь топовую фотку по рейтингу.
Пишу
Неактивен
haykking написал:
Пишу
SELECT * FROM images GROUP BY day ORDER BY rating
Но ничего не выходит , по ходу он только группирует =/
Нет, сначала группирует и полученный результат сортирует (в точности как вы его и просили).
haykking написал:
Мне кажется тут как-то надо составлять запрос в запросе.
Пробовал :SELECT *
FROM images i
JOIN (
SELECT eday, MAX(rating) rating
FROM images
GROUP BY eday
) d ON d.rating = i.rating
Но если есть за один день фотки с одинаковым рейтингом то он выводит обе =\
Мысль верная, но реализация ошибочна.
Вы выбираете те строки из таблицы images i для которых d.rating = i.rating
Т.е. если у вас данные за два дня и в первый максимальный рейтинг был 10, а во втрой 9, то будут выбраны все записи за первый день у которых рейтинг равен 9 или 10, аналогично за второй.
Видимо у вас максимальный рейтинг в разные дни совпадает, поэтому вы и не заметили такой проблемы
Нужно объединять по условию (d.rating = i.rating AND d.eday=i.eday) или в сокращенной записи USING(rating,eday)
Это устранит описанную мной проблему, но не решит ту, что вы указали изначально ("если есть за один день фотки с одинаковым рейтингом то он выводит обе ")
Проблема происходит потому, что комбинация (eday,rating) не определяет однозначно строку в таблице images
Можно:
1) Добавить ещё один group by к результирующей выборке
2) Разбить на 2 запроса. Сначала выбираем id нужных записей, потом извлекаем саму информацию.
Неактивен
Спасибо большое!!
Решил проблему с помощью добавления GROUP BY
Неактивен
Ну, вот, автор напрягался слова придумывал, а его никто не читает.
Ваш запрос работает неправильно. Последняя группировка выбирает произвольную запись из тех, у которых совпадает d.eday
И не факт, что она будет относится к нужному дню.
Неактивен
Лично я сматчился на «решил проблему»
Неактивен