Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Базы данных MySQL

  Все выпуски  

RusFAQ.ru: Базы данных SQL


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Базы данных SQL

Выпуск № 225
от 13.03.2007, 11:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 391, Экспертов: 42
В номере:Вопросов: 1, Ответов: 1


Вопрос № 77500: Здравствуйте! Такой вопрос. Есть скрипт, алгоритм весьма сложен, поэтому рассказывать подробно не буду, а лиш необходимую часть. Есть таблица в базе данных(MySQL). Состоящая из трех полей и большого количества строк. Поля: номер страницы...

Вопрос № 77.500
Здравствуйте! Такой вопрос.
Есть скрипт, алгоритм весьма сложен, поэтому рассказывать подробно не буду, а лиш необходимую часть.
Есть таблица в базе данных(MySQL). Состоящая из трех полей и большого количества строк. Поля:
номер страницы,
IP,
идентификационный номер из куки
(есть еще поле времени но оно для нас несущественно).
Таблица призвана обеспечить работой скрипт статистики. Очень важно знать кол-во уникальных посещений определенной страницы.
То есть когда пользователь посещает определенную страницу, то в данную таблицу заносится код стриницы, IP, и уникальный номер присвоенный скриптом еще раннее в куку. В дальнейшем добавится поле с хешем некоторых дополнительных переменных окружения (но сейчас не об этом). Такой сбор сведений требуется чтобы избежать попыток обмана(накрутки).
Вопрос: как сформулировать запрос к базе данных, так чтобы было показано количество уникльных посетителей определенной страницы? Т.е если хотя бы одно из полей (адрес, номер из куки) совпадают, то считать эти строки за одну.
Например запрос select (любое поле) from user where id=$id выдаст все посещения, как его модифицировать, чтобы количество строк затем соответствовало уникальным посетителям.
Можно конечно так select distinct (любое поле) from user id=$id, но тогда если хотябы одно поле изменится, то пользователь будет уже уникальным.
Более подробно:
Есть строки (поля соответственно ID, IP, NUM)
1. 78 250.123.142.125 45632
2. 78 145.230.178.145 48628
3. 78 145.230.178.145 48628
4. 78 220.175.085.023 45632

Для удобства привел только для 78 страницы статистику.
И так если сделаем запрос select distinct * from user where id=78
то в запросе окажутся все строки кроме 3, поскольку полностью иднентичны только 2 и 3 строки.
таким образом окажется что у нас три уникума. А уникума ведь на самом деле не три, а два, поскольку строки 1 и 4 соответствуют одному посетителю (у них повторяется номер из куки).

Прошу прощения за запутанный вопрос, но прошу разобраться и помоч мне.
Спасибо вам!
Отправлен: 08.03.2007, 11:19
Вопрос задал: Valeraorg (статус: 5-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Ерёмин Андрей
Здравствуйте, Valeraorg!
Действительно, вы всё так запутали, что разобраться нелегко. Ну во-первых, непонятно, если номер читается из куки, то почему он разный в течение времени? Ну да ладно, это нас не должно волновать. Насколько я понимаю, вам достаточно посчитать число разных значений в третьем поле - это и будет количество уникальных посещений. Тогда это делается так:
SELECT * FROM `user` WHERE (`id` = 78) GROUP BY `num`
Команда GROUP собирается все одинаковые значения в одно, т.е. оставляет только уникальные номера.
Вроде бы это должно решить вашу проблему.
Удачи!
---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессор)
Россия, Тула
WWW: Программирование на Delphi. Всё для программиста. Файловый архив, статьи, помощь, советы, обмен опытом.
ICQ: 286867644
----
Ответ отправлен: 08.03.2007, 12:35
Оценка за ответ: 5
Комментарий оценки:
Спасибо вы натолкнули меня на правильный ответ SELECT distinct ip FROM `user` WHERE `id` = 78 GROUP BY `num`
Одной куки недостаточно вообще, пользователь может отключить их и все. Конечно обмануть систему можно в любом случае, но так более удобно.


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
ООО "Мастер-Эксперт Про", Москва, 2007
Авторские права | Реклама на портале
Версия системы: 4.45 beta от 20.02.2007
Яндекс Rambler's Top100

В избранное