Уникальные посещения страницы

sarik1986

Новичок
Здравствуйте ребята. Столкнулся с такой проблемой. Есть мультивользовательский интернет- магазин со сножественными продавцами. Продацы начали жаловаться что нигде не могут видеть посещения своих товаров чтоб знали на какой товар больше интереса у покупателей. Подумал как сделать.Мне нужно было сделать такую вещь. Не хочу сохранять все IP пользователей кто заходит на страницу товара. Так как со временем эта таблица станет безразмерной. Да и еще мне нужно например сегодня зашел человек посчитал +1 завтра тот же человек с того же IP зайдет опять должен +1 просмотр. Вот написал так.

PHP:
$ip = $_SERVER['REMOTE_ADDR'];

$viewer_check_query = "SELECT * FROM counter WHERE ip = '$ip' AND page = '$productid'";
$viewer_check_result = mysql_query($viewer_check_query);
$viewer_check_numrows = mysql_num_rows($viewer_check_result);

if($viewer_check_numrows == 0){
$viewer_new_query = "INSERT INTO counter (ip, page) VALUES
('$ip', '$productid')";
$viewer_new_result = mysql_query($viewer_new_query);

  $upcount = mysqli_query($mysqli, "UPDATE counter 
                       SET counter = counter + 1 
                       WHERE page= '" . $productid . "'");
}


$viewer_total_query = "SELECT * FROM counter WHERE page = '$productid'";
$viewer_total_result = mysql_query($viewer_total_query);
$viewer_total_numrows = mysql_num_rows($viewer_total_result);
Это работает отлично но только сегодня. Потому что мне надо будет стирать все данные сегодня вечером чтоб завтра все пошло по новому. Да и еще оставить данные не могу так как таблица в скором времени станет безразмерной из за постоянных посещений. Потом подумал добавить вот это

PHP:
 $upcount = mysqli_query("UPDATE productst 
                       SET views = ".$viewer_total_numrows." 
                       WHERE page= '" . $productid . "'");
Почему меня не устраивает этот вариант?

1. Еще один запрос к базе прибавился что есть нехорошо. + к этому если я добавлю этот запрос мне придется еще один запрос добавить ставить какое то значение в таблице counter чтоб второй раз когда посещения буду перекидывать в таблицу products не было каши
 

sarik1986

Новичок
Если сделаю так то все будет ок но запросов получается много. Есть ли у кого нибудь идеи какие то насчет этого.может готовое решение простое для посещения страниц.

PHP:
$upcount = mysqli_query("UPDATE productst 
                       SET views = ".$viewer_total_numrows." 
                       WHERE page= '" . $productid . " and  notsend != '" . $productid . "'");
 

Фанат

oncle terrible
Команда форума
я бы хранил все айпи.
вся таблица - 4 инта (айпи, дата, счетчик, идтовара). длина строки - 50 байт
При посещаемости 10 тыс. человек в день это будет 150 мегабайт за год.
Раз в год можно будет и почистить

соответственно, сделать уникальный индекс на дата+айпи, и тогда получится вставлять 1 запросом с ON DUPLICATE
 

sarik1986

Новичок
мммм.так мне зачем хранит их всех попусту если мне нужно хранить каждый IP один день не больше.
 

Фанат

oncle terrible
Команда форума
Ну, во-первых, это не пустота.
Но дело хозяйское.
Кто-то за аналитику большие деньги платит, кто-то наоборот - выкидывает.
Если считаешь, что не нужно - удаляй сразу.
 

sarik1986

Новичок
а как мне сохранить то что было за этот день отдельно чтоб завтра приплюсовать завтршние?
 

Фанат

oncle terrible
Команда форума
я думаю - записать куда-нибудь.
но можешь,в принципе, и наизусть заучивать.
 

sarik1986

Новичок
понятно.ну тогда так и сделаю.но всеравно у меня 3 запроса как минимум будет
 

name_A_D

Нормальный Я)
Если не хочешь хранить IP, а считать уникальных пользователей например через Сессии, то все равно тебе придется делать минимум 2 запроса.
Вот например чем не вариант?

В базе хранишь id, дату, ИД страинцы\товара, посещения
Вначале все равно запрашиваешь данные из таблицы, потом делаешь проверку на сесии.

1) Генерируешь сид, если пользователь уникальный(тоесть сессии не найдены), то открываешь сессию и обновляешь значение на плюс 1 с текущей датой, и выводишь пользователю изначальное значение посещений +1
2) если пользователь уже был(сессии уже созданы), то не обновляешь значения посещений на +1, а выводишь например счетчик уникальных просмотров с изначального запроса

- Кроном убиваешь лишние данные, которые тебе не нужны, за предыдущий день. Вот тебе и порядок в базах!
 

hell0w0rd

Продвинутый новичок
А зачем данные-то убивать? Дисковое пространство - самое дешевое. Я мало о статистике знаю, но неужели 1 дня достаточно?
Подождите Yac/M записей видео. Сквозная мысль конференции - "выбрасывая логи - лишаешь себя прибыли". Программист почты рассказал как на основе логов и пары советов маркетологов(о которых можно было докгадаться) увеличили прибыль с 90$ до 6к$+
 
Сверху