2010-12-06 2 views
3

Я создаю сайт со статьями, и я хочу рассчитать взгляды каждой статьи для показа наиболее популярных статей: сегодня, на этой неделе и в этом месяце.Количество просмотров посетителя за день, за последнюю неделю и за последний месяц

Как бы вы применили схему базы данных для этого?

ответ

4

Если достаточно, чтобы знать, сколько раз статья была отображенных вы могли бы использовать что-то вроде этого:

daily_article_views(
    ,article_id 
    ,view_date 
    ,view_count 
    ,primary key(article_id, view_date) 
    ,foreign key(article_id) references articles 
); 

Для каждого вида статьи, вы LookUp строку в таблице с помощью текущей даты и идентификатор просматриваемой статьи. Если строка существует, вы увеличиваете счетчик. Если строка не существует, вы вставляете ее со значением 1 для view_count (и усеченной датой). Затем вы можете свернуть данные из этой таблицы, используя SUM (view_count), чтобы данные еженедельно, ежемесячно или ежегодно выглядели как необходимые.

Однако, если вам нужно хранить информацию о каждом отдельном представлении, вы можете использовать структуру таблицы, аналогичную следующей.

article_views(
    ,view_id 
    ,article_id 
    ,view_date 
    ,additional_data_about_each_view 
    ,primary key(view_id) 
    ,foreign key(article_id) references articles 
); 

additional_data_about_each_view бы столбцы, представляющие некоторый идентификатор пользователя, может быть IP-адрес или все, что нужно для хранения. Обратите внимание, что в этом дизайне вы сохраните время просмотра статьи, включая время (час, минуты, секунды). Это позволит вам анализировать данные в течение дня, точно, когда просматриваются статьи.

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

1

Если вы, безусловно, не будет заинтересован в информации о времени суток, то вы можете использовать таблицу с 3 колонками

article_id 
date 
view_count 

Вы не обязательно хотите, чтобы увеличить view_count столбец для каждого удар, хотя. Вы можете кэшировать некоторую информацию в своем приложении и обновлять ее партиями.

Смежные вопросы