2012-03-15 3 views
0

Я пытаюсь создать систему блога с php, и мне нужен способ подсчета наиболее просматриваемого сообщения за последние 21 день. Кто-нибудь знает о хорошем способе сделать это?Самые просматриваемые сообщения за последние 21 дней

У меня нет большого опыта работы с php, поэтому мне нужно, чтобы кто-то указал мне в правильном направлении. Я попытался заглянуть в API-интерфейс google anlytics, но это кажется немного сложным. Было бы проще просто использовать куки?

+1

Вам нужно сделать немного больше усилий, задавая вопрос. Каковы структуры ваших таблиц? Что вы пробовали? Существует огромное количество учебников и сообщений в блогах, посвященных этой теме. – nnichols

ответ

1

Так как вы строите свою собственную систему блог, здесь это самый простой способ сделать это:

Я предполагаю, что это анонимный подсчет ваших блог посещений. Если вы хотите записать записи в формате IP, вам придется настроить бизнес-логику.

  1. Создайте новую таблицу, называемую визитами.
  2. Добавить идентификатор (первичный ключ), поле под названием blogpostid (которое будет хранить идентификатор просматриваемого сообщения) и поле с именем dtpost с меткой времени или свойствами datetime, которые при вставке автоматически помещают дату/время.

Теперь вы можете запросить так:

select visits.blogpostid, count(dtpost) as counted from posts 
left join posts on posts.id = visits.blogpostid 
where dtpost between (NOW() AND <-21 days interval function>) 
order by counted DESC group by visits.blogpostid; 

Что вы на самом деле хранит в DateTime кто-то посещает ваш блог. Это автоматически означает, что любой промежуток, который вы установили, будет извлекать данные *. Затем функция count() выполняет подсчет.

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

* Редактировать: Так как это неоднозначно, я имею в виду, что он будет извлекать ваши данные за тот период времени, который вы хотите.

0

Создайте таблицу views с внешним ключом для ввода идентификаторов и добавьте запись с информацией о посетителях и датой. Тогда вы можете получить самые популярные сообщения, как это (непроверенные):

SELECT p.*, COUNT(p.*) count FROM posts p 
INNER JOIN views v ON v.post_id = p.id 
WHERE DATE_SUB(CURDATE(), INTERVAL 21 DAY) <= p.date_viewed 
ORDER BY count DESC 
GROUP BY p.id; 
+0

При добавлении данных в таблицу не забудьте отфильтровать боты и решите, будете ли вы отслеживать уникальные или необработанные сообщения. – Endijs

0

Чтобы предотвратить отсчет от увеличивающиеся при просмотре несколько раз одним и тем же пользователем, вы можете использовать сессионный meganism, чтобы не допустить этого.

session_start(); 

if (!isset($_SESSION['posts_viewed'])) { 
    $_SESSION['posts_viewed'] = array(); 
} 

// some logic to get to relevant post id here 

// check that the post_id is not in the array 
if (!in_array($post_id, $_SESSION['posts_viewed'])) { 

    // logic to increment a persistent counter (e.g. in mysql) here 

    // add post_id to array 
    array_push($_SESSION['posts_viewed'], $post_id); 
} 

// finally some logic that display the post here 

session_close(); 
Смежные вопросы