Проследяване на показвания на страници и показване на ежедневни, седмични, месечни резултати

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

Имам уеб сайт, който показва статии, сортирани по категории. Бих искал да проследя броя гледания на всяка статия. След това в страничната лента покажете 5-те най-гледани статии за текущия ден, в рамките на миналия месец и в рамките на последния месец. Какъв според вас би бил най-добрият начин да направите това? Един ред в базата данни за всеки изглед (article_id, timestamp)? Какво би било най-малкото количество работа за сървъра?

Благодаря, Джо


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
Бих използвал променливата $_SERVER на PHP, за да попълня данни за клиент и страница, след което да напиша реда. Тогава страничният панел може да показва броя на посещенията, като използва SQL заявка, която филтрира по идентификатор на статия и го брои с mysql_num_rows() - person Tim; 22.10.2011