Самые просматриваемые сообщения за последние 21 день - PullRequest
0 голосов
/ 16 марта 2012

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

Ответы [ 3 ]

1 голос
/ 16 марта 2012

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

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

  1. Создать новую таблицу с именем посещения.
  2. Добавить идентификатор (первичный ключ), полес именем blogpostid (в нем будет храниться идентификатор просматриваемой записи) и полем с именем dtpost со свойствами timestamp или 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;

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

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

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

0 голосов
/ 16 марта 2012

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

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();
0 голосов
/ 16 марта 2012

Создайте таблицу 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;
...