Отслеживание просмотров страниц и отображение результатов за день, неделю, месяц

Платформа: PHP5, MySQL.

У меня есть веб-сайт, на котором отображаются статьи, отсортированные по категориям. Я хотел бы отслеживать количество просмотров для каждой статьи. Затем на боковой панели отобразите 5 самых популярных статей за текущий день, за прошедший месяц и за последний месяц. Как вы думаете, что было бы лучшим способом сделать это? Одна строка в базе данных для каждого представления (статья_id, отметка времени)? Какой будет наименьший объем работы для сервера?

Спасибо, Джо


person user1008650    schedule 22.10.2011    source источник


Ответы (2)


Это может стать сложной проблемой. Если вы просто храните необработанные совпадения, ваша таблица будет быстро расти, и обработка чисел займет больше времени. Таким образом, один из способов справиться с этим — создать сводные таблицы и обработать числа с помощью задания cron.

Например, у вас могут быть следующие таблицы

  • hit_count: article_id, отметка времени
  • hit_count_daily: день, год, article_id, hit_count
  • hit_count_weekly: неделя, год, article_id, hit_count
  • hit_count_monthly: месяц, год, article_id, hit_count
  • hit_count_yearly: год, article_id, hit_count

Затем вы обрабатываете данные в таблице hit_count, добавляете их в сводные таблицы, а затем удаляете данные из таблицы hit_count.

Вам также нужно подумать о том, что произойдет, если кто-то обновит страницу или если Google просканирует статью. Вы хотите считать их хитами?

Чтобы поисковые роботы не запускали хиты, вы можете использовать какой-нибудь Javascript на странице, чтобы связаться с вашим сервером и зарегистрировать хит. Таким образом, обычный браузер вызовет попадание, а сканер — нет.

Вы также можете передать эту задачу другому сервису, например Chartbeat или Нажмите

person Nick Clark    schedule 22.10.2011

Как насчет:

Добавьте это в php.ini

auto_append_file = /server_root/footer.php

footer.php содержит тихую процедуру для записи данных SQL.

person Tim    schedule 22.10.2011
comment
Я бы использовал переменную PHP $_SERVER для заполнения данных клиента и страницы, а затем записал бы строку. Затем боковая панель может отображать количество посещений с помощью SQL-запроса, который фильтрует по идентификатору статьи и подсчитывает его с помощью mysql_num_rows(). - person Tim; 22.10.2011