powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / не могу понять...
14 сообщений из 14, страница 1 из 1
не могу понять...
    #33003893
alexччччч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!

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 минут.

можно ли такой результа получить одним запросом?
...
Рейтинг: 0 / 0
не могу понять...
    #33004103
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Ты не умничай, ты рукой покажи" (с)

Приводи пример исх.данных и желаемого результирующего набора данных.
...
Рейтинг: 0 / 0
не могу понять...
    #33006244
alexччччч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хорошо.

Вот несколько 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 мин. и более.
...
Рейтинг: 0 / 0
не могу понять...
    #33008162
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты опять умничаешь... Какие-то "переходы", какие-то "страницы", какие-то "посещения"...

Ещё раз. Приводи только исходные данные (в принципе, подойдет, что уже указал) и желаемый результирующий набор данных, полученный искомым запросом. С пояснением, почему та или иная запись попала в выборку.
Всё. Больше никакой лирики не надо.
...
Рейтинг: 0 / 0
не могу понять...
    #33009613
alexччччч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
понял!

вот записи:

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 раза.


Надеюсь сейчас я не умничал :)
...
Рейтинг: 0 / 0
не могу понять...
    #33009910
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теперь всё понятно :)

Код: plaintext
1.
2.
3.
4.
SELECT COUNT(*), T1.session FROM Table T1
WHERE T1.dateser+"15 минут" >= SELECT MIN(T2.dateser) FROM Table T2
                               WHERE (T1.session = T2.session) AND
                                     (T1.dateser<T2.dateser) 
GROUP BY T1.session

где "15 минут" скорее всего = 1/24/4
...
Рейтинг: 0 / 0
не могу понять...
    #33010406
alexччччч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо за ответ.
я вот только не силен в 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"?
...
Рейтинг: 0 / 0
не могу понять...
    #33010518
alexччччч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я тут потестировал немного.

Этот запрос берет MIN() значение dateser и выводит все записи у которых совпадает поле session и которые больше этого минимального значения.

А мне бы хотелось полчить данные где у пользователя с сессией f0a40fdb61319acb6d327453b9decbac два раза было так, что зайдя на страницу он посидел на ней 15 и более минут и перешел на другую.
А у пользователя с сессией 3188006ac1556e6be29ccf0ceae8a2fc такое случилось 3 раза.
...
Рейтинг: 0 / 0
не могу понять...
    #33011344
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, ну конечно же никаких +15 не должно быть !!! От этого и неправильно !
Пробуй, как уже упоминалось, 1/24/4
где 24 - количество часов в сутках, 4 - количество четвертей часа (15 мин) в часе :))
...
Рейтинг: 0 / 0
не могу понять...
    #33012216
alexччччч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
К сожалению опять не пошло...

Запрос такой:

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

Что же может быть?
...
Рейтинг: 0 / 0
не могу понять...
    #33013522
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй
Код: plaintext
1.
2.
3.
SELECT COUNT(*), T1.session FROM stat_visitors as T1
WHERE T1.dateser +  1500  >= (SELECT MIN(T2.dateser+ 0 ) FROM stat_visitors as T2
WHERE (T1.session = T2.session) AND (T1.dateser<T2.dateser))
GROUP BY T1.session;

Если и так получится неверный результат, то значит MySQL даже в версии >4.1 ещё не научился правильно работать с вложенными запросами
Сам проверить не могу т.к. версия < 4.1
...
Рейтинг: 0 / 0
не могу понять...
    #33014747
alexччччч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И снова здравствуйте!

Поскольку я плохо знаю 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.
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,
  `session` varchar( 32 ) default NULL,
  `page` varchar( 32 ) default NULL,
  UNIQUE KEY `id` (`id`),
  KEY `dateser` (`dateser`)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251 AUTO_INCREMENT= 1 ;


INSERT INTO `stat_visitors` VALUES ( 1 , '127.0.0.2', '', 'transper', '2005-04-14 07:38:37', '764f74ff163b3b445b46787d0850bb62', 'http://somesite.com/index.php');
INSERT INTO `stat_visitors` VALUES ( 2 , '127.0.0.2', '', 'transper', '2005-04-14 07:38:40', '764f74ff163b3b445b46787d0850bb62', 'http://somesite.com/index.php');
INSERT INTO `stat_visitors` VALUES ( 3 , '127.0.0.2', '', 'transper', '2005-04-14 08:39:01', '764f74ff163b3b445b46787d0850bb62', 'http://somesite.com/index.php');
INSERT INTO `stat_visitors` VALUES ( 4 , '127.0.0.2', '', 'transper', '2005-04-14 08:39:02', '764f74ff163b3b445b46787d0850bb62', 'http://somesite.com/index.php');
INSERT INTO `stat_visitors` VALUES ( 5 , '127.0.0.2', '', 'transper', '2005-04-14 09:39:07', '764f74ff163b3b445b46787d0850bb62', 'http://somesite.com/index.php');
INSERT INTO `stat_visitors` VALUES ( 6 , '127.0.0.2', '', 'transper', '2005-04-14 09:39:08', '764f74ff163b3b445b46787d0850bb62', 'http://somesite.com/index.php');
INSERT INTO `stat_visitors` VALUES ( 7 , '127.0.0.2', '', 'transper', '2005-04-14 09:39:09', '764f74ff163b3b445b46787d0850bb62', 'http://somesite.com/index.php');
INSERT INTO `stat_visitors` VALUES ( 8 , '127.0.0.2', '', 'transper', '2005-04-14 10:39:14', '764f74ff163b3b445b46787d0850bb62', 'http://somesite.com/index.php');
INSERT INTO `stat_visitors` VALUES ( 9 , '127.0.0.2', '', 'transper', '2005-04-14 10:39:15', '764f74ff163b3b445b46787d0850bb62', 'http://somesite.com/index.php');
INSERT INTO `stat_visitors` VALUES ( 10 , '127.0.0.2', '', 'transper', '2005-04-14 10:39:16', '764f74ff163b3b445b46787d0850bb62', 'http://somesite.com/index.php');
INSERT INTO `stat_visitors` VALUES ( 11 , '127.0.0.2', '', 'transper', '2005-04-14 07:39:20', '764f74ff163b3b445b46787d0850bb62', 'http://somesite.com/index.php');
INSERT INTO `stat_visitors` VALUES ( 12 , '127.0.0.2', '', 'transper', '2005-04-14 07:44:00', 'f54c33606466f59395d4b97118ee3d58', 'http://somesite.com/index.php');
INSERT INTO `stat_visitors` VALUES ( 13 , '127.0.0.2', '', 'transper', '2005-04-14 07:44:02', 'f54c33606466f59395d4b97118ee3d58', 'http://somesite.com/index.php');
INSERT INTO `stat_visitors` VALUES ( 14 , '127.0.0.2', '', 'transper', '2005-04-14 08:44:08', 'f54c33606466f59395d4b97118ee3d58', 'http://somesite.com/index.php');
INSERT INTO `stat_visitors` VALUES ( 15 , '127.0.0.2', '', 'transper', '2005-04-14 08:44:09', 'f54c33606466f59395d4b97118ee3d58', 'http://somesite.com/index.php');
INSERT INTO `stat_visitors` VALUES ( 16 , '127.0.0.2', '', 'transper', '2005-04-14 09:44:12', 'f54c33606466f59395d4b97118ee3d58', 'http://somesite.com/index.php');
INSERT INTO `stat_visitors` VALUES ( 17 , '127.0.0.2', '', 'transper', '2005-04-14 09:44:13', 'f54c33606466f59395d4b97118ee3d58', 'http://somesite.com/index.php');
INSERT INTO `stat_visitors` VALUES ( 18 , '127.0.0.2', '', 'transper', '2005-04-14 09:44:14', 'f54c33606466f59395d4b97118ee3d58', 'http://somesite.com/index.php');
INSERT INTO `stat_visitors` VALUES ( 19 , '127.0.0.2', '', 'transper', '2005-04-14 09:44:14', 'f54c33606466f59395d4b97118ee3d58', 'http://somesite.com/index.php');
INSERT INTO `stat_visitors` VALUES ( 20 , '127.0.0.2', '', 'transper', '2005-04-14 10:44:22', 'f54c33606466f59395d4b97118ee3d58', 'http://somesite.com/index.php');
INSERT INTO `stat_visitors` VALUES ( 21 , '127.0.0.2', '', 'transper', '2005-04-14 10:44:23', 'f54c33606466f59395d4b97118ee3d58', 'http://somesite.com/index.php');
INSERT INTO `stat_visitors` VALUES ( 22 , '127.0.0.2', '', 'transper', '2005-04-14 10:44:23', 'f54c33606466f59395d4b97118ee3d58', 'http://somesite.com/index.php');
INSERT INTO `stat_visitors` VALUES ( 23 , '127.0.0.2', '', 'transper', '2005-04-14 11:44:28', 'f54c33606466f59395d4b97118ee3d58', 'http://somesite.com/index.php');
INSERT INTO `stat_visitors` VALUES ( 24 , '127.0.0.2', '', 'transper', '2005-04-14 11:44:28', 'f54c33606466f59395d4b97118ee3d58', 'http://somesite.com/index.php');
INSERT INTO `stat_visitors` VALUES ( 25 , '127.0.0.2', '', 'transper', '2005-04-14 11:44:29', 'f54c33606466f59395d4b97118ee3d58', 'http://somesite.com/index.php');
INSERT INTO `stat_visitors` VALUES ( 26 , '127.0.0.2', '', 'transper', '2005-04-14 11:44:30', 'f54c33606466f59395d4b97118ee3d58', 'http://somesite.com/index.php');
INSERT INTO `stat_visitors` VALUES ( 27 , '127.0.0.2', '', 'transper', '2005-04-14 12:44:33', 'f54c33606466f59395d4b97118ee3d58', 'http://somesite.com/index.php');
INSERT INTO `stat_visitors` VALUES ( 28 , '127.0.0.2', '', 'transper', '2005-04-14 12:44:34', 'f54c33606466f59395d4b97118ee3d58', 'http://somesite.com/index.php');
INSERT INTO `stat_visitors` VALUES ( 29 , '127.0.0.2', '', 'transper', '2005-04-14 12:44:35', 'f54c33606466f59395d4b97118ee3d58', 'http://somesite.com/index.php');
INSERT INTO `stat_visitors` VALUES ( 30 , '127.0.0.2', '', 'transper', '2005-04-14 12:44:36', 'f54c33606466f59395d4b97118ee3d58', 'http://somesite.com/index.php');
INSERT INTO `stat_visitors` VALUES ( 31 , '127.0.0.2', '', 'transper', '2005-04-14 07:44:41', 'f54c33606466f59395d4b97118ee3d58', 'http://somesite.com/index.php');
INSERT INTO `stat_visitors` VALUES ( 32 , '127.0.0.2', '', 'transper', '2005-04-14 07:58:35', '764f74ff163b3b445b46787d0850bb62', 'http://somesite.com/index.php');
INSERT INTO `stat_visitors` VALUES ( 33 , '127.0.0.2', '', 'transper', '2005-04-14 08:07:09', '764f74ff163b3b445b46787d0850bb62', 'http://somesite.com/index.php');

Вышеуказанный 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)?

Не могли бы Вы разъяснить мне все это?
...
Рейтинг: 0 / 0
не могу понять...
    #33015321
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет !

Всё по порядку:
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)?

Это значит, что выбирать минимум будем только среди "последующих" в смысле времени записей.
...
Рейтинг: 0 / 0
не могу понять...
    #33015512
alexччччч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет!!!!

Если в двух словах, то все работает!!!!!!

Все отлично!

Проблема была видимо в том, что я руками редактировал записи для размещения на форуме...
Данные, кончено же, не могут дублироваться.

Щас все проверил. Исправил >= на <= .

Низкий поклон и огромное спасибо за помощь! Вы мне очень очень сильно помогли.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / не могу понять...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]