Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / не могу понять... / 14 сообщений из 14, страница 1 из 1
08.04.2005, 06:35
    #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
08.04.2005, 10:19
    #33004103
Johnmen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не могу понять...
"Ты не умничай, ты рукой покажи" (с)

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

Ещё раз. Приводи только исходные данные (в принципе, подойдет, что уже указал) и желаемый результирующий набор данных, полученный искомым запросом. С пояснением, почему та или иная запись попала в выборку.
Всё. Больше никакой лирики не надо.
...
Рейтинг: 0 / 0
12.04.2005, 06:15
    #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
12.04.2005, 10:12
    #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
12.04.2005, 12:38
    #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
12.04.2005, 13:03
    #33010518
alexччччч
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не могу понять...
Я тут потестировал немного.

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

А мне бы хотелось полчить данные где у пользователя с сессией f0a40fdb61319acb6d327453b9decbac два раза было так, что зайдя на страницу он посидел на ней 15 и более минут и перешел на другую.
А у пользователя с сессией 3188006ac1556e6be29ccf0ceae8a2fc такое случилось 3 раза.
...
Рейтинг: 0 / 0
12.04.2005, 17:01
    #33011344
Johnmen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не могу понять...
Нет, ну конечно же никаких +15 не должно быть !!! От этого и неправильно !
Пробуй, как уже упоминалось, 1/24/4
где 24 - количество часов в сутках, 4 - количество четвертей часа (15 мин) в часе :))
...
Рейтинг: 0 / 0
13.04.2005, 05:52
    #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
13.04.2005, 14:49
    #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
14.04.2005, 06:40
    #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
14.04.2005, 11:36
    #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
14.04.2005, 12:23
    #33015512
alexччччч
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не могу понять...
Привет!!!!

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

Все отлично!

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

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

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


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