Перейти к содержимому



  • Закрытая тема Тема закрыта

Статистика переходов по внешней ссылке

#1

Поделиться сообщением #1



1putnik

1putnik
  • Неактивные
  • 96 сообщений
  • Репутация: 8
0

Отправлено 27 Ноябрь 2012 - 23:44

Всем здравствуйте!
Помогите, пожалуйста, решить проблему:
Есть сайт и на нем не правильно ведется статистика переходов по внешней ссылке. В базе данных есть три столбца: "сегодня", "вчера" и "всего". Записывается только в столбцы "сегодня" и "всего", причем они всегда имеют одинаковые значения, а столбец "вчера" всегда - 0.
В чем может быть проблема в PHP-коде или базе MySQL ?
Привожу кусок кода для обновления статистики, может здесь что не так:

mysql_query("UPDATE adfsr SET clx = clx + 1, allclx = allclx + 1, sum = sum + ".$price.", allsum = allsum + ".$price.", ctr = ".$ctr." WHERE id = ".$sid." LIMIT 1");

clx - переходов сегодня
clx_yday - переходов вчера
allclx - переходов всего

 

 

  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85
Советую обратить внимание на следующее:
  1. Link-ip.int.ru
  2. Как посмотреть статистику сайта?
  3. Запретить переходы с определенных сайтов
  4. Переадресация внешних ссылок
  5. Вопрос по открытию внешних ссылок через go.php

#2

Поделиться сообщением #2



yury

yury
  • Пользователь
  • 632 сообщений
  • Репутация: 181

Отправлено 28 Ноябрь 2012 - 11:53

1putnik,
из вашего вопроса не очень понятно как называются у вас поля "сегодня", "вчера" и "всего".

* Подключаем телепатию и недюжинные познания английского

и начинаем подозревать, что этими полями могут быть вот эти:

`clx` int(1) NOT NULL DEFAULT '0',
`clx_yday` int(1) NOT NULL DEFAULT '0',
`allclx` int(50) NOT NULL DEFAULT '0',

Далее рассматриваем ваши запросы к БД и обнаруживаем, что упоминаются только два из них и только тут:

mysql_query("UPDATE advert_tizer SET clx = clx + 1, allclx = allclx + 1, sum = sum + ".$price.", allsum = allsum + ".$price.", ctr = ".$ctr." WHERE id = ".$sid." LIMIT 1");

Т.е. происходит одновременное и безусловное (нет никакой проверки сегодняшние данные мы обновляем или нет) увеличение на единицу полей "сегодня" и "всего" (clx и allclx).
Потому нет ничего удивительного что у вас "сегодня" и "всего" одинаковые.
А поле clx_yday ("вчера") вообще нигде не меняется.
Потому нет ничего удивительного, что у вас "вчера" все время равно нулю.

* Отключаем телепатию и недюжинные познания английского

PS вы подправили свой вопрос и теперь стало понятнее, что телепатия сработала. Поэтому ответ остается прежним.


  • 1

#3

Поделиться сообщением #3



1putnik

1putnik
    Topic Starter
  • Неактивные
  • 96 сообщений
  • Репутация: 8

Отправлено 28 Ноябрь 2012 - 12:07

происходит одновременное и безусловное (нет никакой проверки сегодняшние данные мы обновляем или нет) увеличение на единицу полей "сегодня" и "всего" (clx и allclx).
Потому нет ничего удивительного что у вас "сегодня" и "всего" одинаковые.
А поле clx_yday ("вчера") вообще нигде не меняется.
Потому нет ничего удивительного, что у вас "вчера" все время равно нулю.

* Отключаем телепатию и недюжинные познания английского

Ну это понятно. Я просто думал есть какие-то настройки в phpMyAdmin.
yury, может быть подскажите как это реализовать, чтобы clx - обнулялось в 24:00, clx_yday - принимало значение clx в 24:00
Вернее сначало clx_yday - принимало значение clx в 24:00, а затем сразу clx - обнулялось
  • 0

#4

Поделиться сообщением #4



yury

yury
  • Пользователь
  • 632 сообщений
  • Репутация: 181

Отправлено 28 Ноябрь 2012 - 13:22

Ну это понятно. Я просто думал есть какие-то настройки в phpMyAdmin. yury, может быть подскажите как это реализовать, чтобы clx - обнулялось в 24:00, clx_yday - принимало значение clx в 24:00

ОК.
Если это понятно, то следующий момент для понимания это то, что обнулять clx и менять значение clx_yday надо не в 24:00, а
* надо где-то хранить дату, которая соответствует понятию "сегодня" при предыдущем обновлении БД.
* при добавлении очередного перехода по внешней ссылке в базу, надо сверяться совпадает ли это значение с текущей датой и в случае не совпадения выполнять соответствующие переприсваивания (clx_yday = clx и обнуление clx) и после этого обновить значение хранимой даты (см предыдущий пункт).
  • 0

#5

Поделиться сообщением #5



1putnik

1putnik
    Topic Starter
  • Неактивные
  • 96 сообщений
  • Репутация: 8

Отправлено 28 Ноябрь 2012 - 17:07

надо где-то хранить дату, которая соответствует понятию "сегодня" при предыдущем обновлении БД.

Поле clx - это и есть сегодня, только оно совпадает с показаниями поля всего (allclx), так как не обнуляется с наступлением новых суток.

при добавлении очередного перехода по внешней ссылке в базу, надо сверяться совпадает ли это значение с текущей датой и в случае не совпадения выполнять соответствующие переприсваивания (clx_yday = clx и обнуление clx) и после этого обновить значение хранимой даты

А просто переприсвоить ( clx_yday = clx ) с наступлением новых суток нельзя? А затем clx - обнулить?
Статистики по определенной дате на сайте нет, да и не нужно
  • 0

#6

Поделиться сообщением #6



yury

yury
  • Пользователь
  • 632 сообщений
  • Репутация: 181

Отправлено 28 Ноябрь 2012 - 18:12

Поле clx - это и есть сегодня, только оно совпадает с показаниями поля всего (allclx), так как не обнуляется с наступлением новых суток.

* поле "clx" у вас это количество переходов по внешней ссылке за "сегодня", а не дата.
* кто будет на сервере сидеть и караулить не наступили ли новые сутки? Есть конечно всякие примочки для запуска скриптов по расписанию, типа cron-а и jobs-ов, но не думаю, что в данном случае с ними надо заморачиваться, потому как это не просто все и не факт, что вас к этим вещам администратор сервера допустит.
* самый простой вариант это увидеть (не наступили ли новые сутки и не пора ли данные про "сегодня" перебросить во "вчера" и обнулять сегодняшний счетчик) — это при очередном увеличении счетчика и обновлении базы сравнить текущую дату и дату предыдущего обновления БД.
Для этого всего одно поле в БД потребуется добавить и все у вас получится.
  • 0

#7

Поделиться сообщением #7



1putnik

1putnik
    Topic Starter
  • Неактивные
  • 96 сообщений
  • Репутация: 8

Отправлено 28 Ноябрь 2012 - 18:24

самый простой вариант это увидеть (не наступили ли новые сутки и не пора ли данные про "сегодня" перебросить во "вчера" и обнулять сегодняшний счетчик) — это при очередном увеличении счетчика и обновлении базы сравнить текущую дату и дату предыдущего обновления БД.

Как это сделать?

Для этого всего одно поле в БД потребуется добавить

Какое поле нужно?
Увы я не програмист. Я редактирую PHP методом тыка.
  • 0

#8

Поделиться сообщением #8



1putnik

1putnik
    Topic Starter
  • Неактивные
  • 96 сообщений
  • Репутация: 8

Отправлено 29 Ноябрь 2012 - 11:54

Все, проблема решена

yury был прав на счет cron

В установке скрипта я упустил запуск планировщика cron, что было описано в инструкции.

Тема закрыта !
  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru