|
|
|
не могу понять...
|
|||
|---|---|---|---|
|
#18+
Всем привет! MySql 4.1.10 Есть таблица куда я записываю пользователей т.е. кто когда и откуда пришел. CREATE TABLE `stat_visitors` ( `id` int(255) unsigned NOT NULL auto_increment, `ip` varchar(16) default NULL, `referrer` varchar(255) default NULL, `host` varchar(255) default NULL, `dateser` datetime default NULL, `page` varchar(32) default NULL, UNIQUE KEY `id` (`id`), KEY `dateser` (`dateser`) ) ENGINE=InnoDB DEFAULT CHARSET=cp1251; мне необходимо вывести количество сессий (как на hotloge или liveinternet) т.е. количество просмотров пользователями групп страниц сайта, если между этими просмотрами было более 15 минут. можно ли такой результа получить одним запросом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2005, 06:35 |
|
||
|
не могу понять...
|
|||
|---|---|---|---|
|
#18+
"Ты не умничай, ты рукой покажи" (с) Приводи пример исх.данных и желаемого результирующего набора данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2005, 10:19 |
|
||
|
не могу понять...
|
|||
|---|---|---|---|
|
#18+
Хорошо. Вот несколько insert INSERT INTO `stat_visitors` VALUES (1, '127.0.0.2', '', 'transper', '2005-04-08 10:01:14', 'http://somesite.ru/index.php'); INSERT INTO `stat_visitors` VALUES (2, '127.0.0.2', '', 'transper', '2005-04-08 10:19:16', 'http://somesite.ru/index2.php'); INSERT INTO `stat_visitors` VALUES (3, '127.0.0.2', '', 'transper', '2005-04-08 10:22:54', 'http://somesite.ru/index3.php'); INSERT INTO `stat_visitors` VALUES (4, '127.0.0.2', '', 'transper', '2005-04-08 10:28:14', 'http://somesite.ru/index4.php'); INSERT INTO `stat_visitors` VALUES (5, '127.0.0.2', '', 'transper', '2005-04-08 10:58:14', 'http://somesite.ru/index5.php'); Это предполагаемый путь пользоватлея по сайту. Т.е. зашел на страницу программа записала: такая-то страница, зашел тогда то. Перешел на другую страницу: опять записываем:такая-то страница, зашел тогда то. Искомые данные - количество переходов по страницам, где время посещения одной страницы отличается от времени посещения другой на 15 мин. и более. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2005, 06:57 |
|
||
|
не могу понять...
|
|||
|---|---|---|---|
|
#18+
Ты опять умничаешь... Какие-то "переходы", какие-то "страницы", какие-то "посещения"... Ещё раз. Приводи только исходные данные (в принципе, подойдет, что уже указал) и желаемый результирующий набор данных, полученный искомым запросом. С пояснением, почему та или иная запись попала в выборку. Всё. Больше никакой лирики не надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2005, 13:36 |
|
||
|
не могу понять...
|
|||
|---|---|---|---|
|
#18+
понял! вот записи: 1, '127.0.0.2', 'transper', '2005-04-08 10:01:14', 'http://somesite.ru/index.php', 'f0a40fdb61319acb6d327453b9decbac'; 2, '127.0.0.2', 'transper', '2005-04-08 10:11:14', 'http://somesite.ru/index2.php', 'f0a40fdb61319acb6d327453b9decbac'; 3, '127.0.0.2', 'transper', '2005-04-08 10:40:44', 'http://somesite.ru/index3.php', 'f0a40fdb61319acb6d327453b9decbac'; 4, '127.0.0.2', 'transper', '2005-04-08 11:21:44', 'http://somesite.ru/index4.php', 'f0a40fdb61319acb6d327453b9decbac'; 5, '127.0.0.7', 'ntprt', '2005-04-08 11:11:44', 'http://somesite.ru/index.php', '3188006ac1556e6be29ccf0ceae8a2fc'; 6, '127.0.0.7', 'ntprt', '2005-04-08 11:40:44', 'http://somesite.ru/index2.php', '3188006ac1556e6be29ccf0ceae8a2fc'; 7, '127.0.0.7', 'ntprt', '2005-04-08 12:16:44', 'http://somesite.ru/index3.php', '3188006ac1556e6be29ccf0ceae8a2fc'; 8, '127.0.0.7', 'ntprt', '2005-04-08 12:57:44', 'http://somesite.ru/index4.php', '3188006ac1556e6be29ccf0ceae8a2fc'; Т.о. имеем двух пользователей ходивших по сайту. Результат того, чего я хочу выглядит так: +---count------------------session-------------------+ +--- 2 ------f0a40fdb61319acb6d327453b9decbac--+ +--- 3 ------3188006ac1556e6be29ccf0ceae8a2fc--+ Т.е. у пользователя с сессией f0a40fdb61319acb6d327453b9decbac два раза было так, что зайдя на страницу он посидел на ней 15 и более минут и перешел на другую. А у пользователя с сессией 3188006ac1556e6be29ccf0ceae8a2fc такое случилось 3 раза. Надеюсь сейчас я не умничал :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2005, 06:15 |
|
||
|
не могу понять...
|
|||
|---|---|---|---|
|
#18+
Теперь всё понятно :) Код: plaintext 1. 2. 3. 4. где "15 минут" скорее всего = 1/24/4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2005, 10:12 |
|
||
|
не могу понять...
|
|||
|---|---|---|---|
|
#18+
спасибо за ответ. я вот только не силен в sql. У меня этот запрос возвращает не те данные. Запрос вот такой: SELECT COUNT(*), T1.session FROM stat_visitors as T1 WHERE T1.dateser+15 >= (SELECT MIN(T2.dateser) FROM stat_visitors as T2 WHERE (T1.session = T2.session) AND (T1.dateser<T2.dateser)) GROUP BY T1.session; Может я чего не так пишу? и еще вопрос. А что такое "где "15 минут" скорее всего = 1/24/4"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2005, 12:38 |
|
||
|
не могу понять...
|
|||
|---|---|---|---|
|
#18+
Я тут потестировал немного. Этот запрос берет MIN() значение dateser и выводит все записи у которых совпадает поле session и которые больше этого минимального значения. А мне бы хотелось полчить данные где у пользователя с сессией f0a40fdb61319acb6d327453b9decbac два раза было так, что зайдя на страницу он посидел на ней 15 и более минут и перешел на другую. А у пользователя с сессией 3188006ac1556e6be29ccf0ceae8a2fc такое случилось 3 раза. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2005, 13:03 |
|
||
|
не могу понять...
|
|||
|---|---|---|---|
|
#18+
Нет, ну конечно же никаких +15 не должно быть !!! От этого и неправильно ! Пробуй, как уже упоминалось, 1/24/4 где 24 - количество часов в сутках, 4 - количество четвертей часа (15 мин) в часе :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2005, 17:01 |
|
||
|
не могу понять...
|
|||
|---|---|---|---|
|
#18+
К сожалению опять не пошло... Запрос такой: SELECT COUNT(*), T1.session FROM stat_visitors as T1 WHERE T1.dateser + "1/24/4" >= (SELECT MIN(T2.dateser) FROM stat_visitors as T2 WHERE (T1.session = T2.session) AND (T1.dateser<T2.dateser)) GROUP BY T1.session; Пробовал и в кавычках "1/24/4" и без 1/24/4. Все равно результат как я и писал. Берется MIN() значение и потом считается сколько записей, которые больше этого мин значения. На всякий случай - у меня mysql 4.1.10 Что же может быть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2005, 05:52 |
|
||
|
не могу понять...
|
|||
|---|---|---|---|
|
#18+
Попробуй Код: plaintext 1. 2. 3. Если и так получится неверный результат, то значит MySQL даже в версии >4.1 ещё не научился правильно работать с вложенными запросами Сам проверить не могу т.к. версия < 4.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2005, 14:49 |
|
||
|
не могу понять...
|
|||
|---|---|---|---|
|
#18+
И снова здравствуйте! Поскольку я плохо знаю sql, то могу лишь констатировать факт, что скрипт стал выдавать что-то другое. Приведу небольшой дамп Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. Вышеуказанный Johnmen запрос возвращает такое: +---count(*)--------session------------------------------+ +---7---------------764f74ff163b3b445b46787d0850bb62--+ +---12--------------f54c33606466f59395d4b97118ee3d58--+ А результат хотелось бы получить такой: +---count(*)--------session------------------------------+ +---3---------------764f74ff163b3b445b46787d0850bb62--+ +---5--------------f54c33606466f59395d4b97118ee3d58---+ Johnmen, не могли бы Вы разъяснить мне что именно делает Ваш запрос. Я понимаю, что время каждой записи увеличивается на 15 минут, потом отбирается MIN() значение. Только вот я не понимаю зачем писать MIN(T2.dateser+0), что это дает? Я не в плане критики, я просто спрашиваю. Также не могу понять что такое AND (T1.dateser<T2.dateser)? Не могли бы Вы разъяснить мне все это? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2005, 06:40 |
|
||
|
не могу понять...
|
|||
|---|---|---|---|
|
#18+
Привет ! Всё по порядку: 1. посмотри внимательней, count должен быть 4,5, а не 3,5 2. судя по приведенному тобой результату MySQL4.1 правильно отрабатывает вложенные запросы (в чём я почти не сомневался) 3. у меня вкралась досадная неточность, вместо ... >= (SELECT... должно быть ... <= (SELECT... 4. +1500 это +15мин, т.к. тип результата сложения будет неявно приведен к большому целому вида напр. 20050408125744, поэтому для одинаковости типов сравниваемых переменных ещё и +0 5. тут я узрел у тебя, что записи могут дублироваться !!! это значит, что НЕВОЗМОЖНО получить правильный результат в принципе, т.к. теряется признак последовательности записей. В этом качестве мог бы выступить ID, но судя по твоим данным, и он не годится. Резюме. Надо иметь в таблице непротиворечивые "однозначные" данные, чтобы получить правильный результат. PS >Также не могу понять что такое AND (T1.dateser<T2.dateser)? Это значит, что выбирать минимум будем только среди "последующих" в смысле времени записей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2005, 11:36 |
|
||
|
не могу понять...
|
|||
|---|---|---|---|
|
#18+
Привет!!!! Если в двух словах, то все работает!!!!!! Все отлично! Проблема была видимо в том, что я руками редактировал записи для размещения на форуме... Данные, кончено же, не могут дублироваться. Щас все проверил. Исправил >= на <= . Низкий поклон и огромное спасибо за помощь! Вы мне очень очень сильно помогли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2005, 12:23 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=661&tid=1854159]: |
0ms |
get settings: |
5ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
30ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
| others: | 219ms |
| total: | 332ms |

| 0 / 0 |
