WBS
Новичок
Сразу приведу простой пример. Есть множество фильмов, за которые голосуют пользователи. По результатам голосования формируются рейтинги лучших за год, месяц, неделю.
Составить рейтинг (например, за 2011 год) очень просто:
Интересует, каким образом наиболее эффективно (желательно с помощью одного запроса) можно достать информацию:
- об изменении позиции в рейтинге относительно предыдущего периода ("в текущем месяце относительно прошлого", "на этой неделе относительно прошлой" и т.д.);
- о лучшей позиции в рейтинге за указанный период ("лучшая позиция в недельных рейтингах" и т.д.).
В качестве примера, где реализовано нечто подобное, приведу музыкальный хит-парад. Скорее всего позиции в рейтинге тут хранятся в базе в явном виде (а не вычисляются). Поэтому отследить изменения в рейтинге (колонка "+/-") или определить лучшее место (колонка "Лучшее место") значительно проще.
Код:
CREATE TABLE votes (
id_film INT NOT NULL,
dt DATE NOT NULL,
votes INT NOT NULL,
PRIMARY KEY (id_film, dt),
KEY (dt),
KEY (votes)
);
Составить рейтинг (например, за 2011 год) очень просто:
Код:
SELECT id_film, sum(votes) as votes_sum
WHERE YEAR(dt)=2011
GROUP BY id_film
ORDER BY votes_sum DESC;
Интересует, каким образом наиболее эффективно (желательно с помощью одного запроса) можно достать информацию:
- об изменении позиции в рейтинге относительно предыдущего периода ("в текущем месяце относительно прошлого", "на этой неделе относительно прошлой" и т.д.);
- о лучшей позиции в рейтинге за указанный период ("лучшая позиция в недельных рейтингах" и т.д.).
В качестве примера, где реализовано нечто подобное, приведу музыкальный хит-парад. Скорее всего позиции в рейтинге тут хранятся в базе в явном виде (а не вычисляются). Поэтому отследить изменения в рейтинге (колонка "+/-") или определить лучшее место (колонка "Лучшее место") значительно проще.