Консультация № 69879
07.01.2007, 16:03
0.00 руб.
0 1 1
Здравствуйте, эксперты! Поздравляю с праздниками!
Есть сайт с картинками для мобильников (бесплатные). Есть в нём раздел top (популярные). Необходимо сделать так, чтобы можно было смотреть популярные картинки например "за сутки", "за неделю", "за месяц", "за всё время". В настоящий момент там просто популярные картинки по кол-ву загрузок, т.е. "за всё время". Вот как это осуществить? Была такая мысль, сделать несколько полей (соответственно day week month total), инкрементировать их на каждой загрузке и просто обнулять посредством cron каждый день, неделю, месяц соответственно. Но это меня не устраивает. Хочу сделать так, подобно http://browse.deviantart.com/?order=9

Обсуждение

Неизвестный
07.01.2007, 18:51
общий
это ответ
Здравствуйте, Бобровский Сергей Сергеевич!
Есть 2 варианта решения вашей задачи:
1) Это использование дополнительной таблицы для ведения логов закачки картинок.
2) Это ваша мысль. Использовать дополнительные поля в таблице: day,week и т.д.
Я рассмотрю только первый способ, т.к. второй вы знаете
Первый способ полезен тем, что можно указывать любые промежутки времени для оценки количества скачивания, но минус состоит в том что размер этой таблицы будет не маленький, если с сайта скачивают много.
Таблицу логов(pict_log) делаем из 2 полей: pict_id(INT), stamp(timestamp). При каждом закачивании добавляем в таблицу запись.
Теперь можно будет составить запрос для популярных картинок за месяц:
<b>SELECT *,COUNT(*) as kol FROM `pict_log`
WHERE stamp>(NOW() - INTERVAL 1 MONTH)
GROUP BY pict_id
ORDER BY kol DESC</b>
за неделю:
<b>SELECT *,COUNT(*) as kol FROM `pict_log`
WHERE stamp>(NOW() - INTERVAL 7 DAY)
GROUP BY pict_id
ORDER BY kol DESC</b>
Также можно составить за более крупные периоды, например, за 2006 год:
<b>SELECT *,COUNT(*) as kol FROM `pict_log`
WHERE YEAR(stamp)=2006
GROUP BY pict_id
ORDER BY kol DESC</b>
За январь 2006:
<b>SELECT *,COUNT(*) as kol FROM `pict_log`
WHERE YEAR(stamp)=2006 AND (MONTH(stamp)=01)
GROUP BY pict_id
ORDER BY kol DESC</b>
В прикреплённом файле содержиться вырезка из справочника MySQL о функциях при работе с датой.
Форма ответа