Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.01.2018, 20:16   #1
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 301
По умолчанию Запросы. часть третья.

Итак, предыдущие две задачи помогли решить успешно, может еще и третью реально будет решить?

Есть ип, и время его обращения в utc формате(число вообщем).
Формат ip - время
188.165.2.51 - 1474154412
178.161.0.21 - 1474154417
И так далее...

Возможно ли отловить запросом ситуацию, когда время идет, скажем три раза подряд одно и то же, то есть сделанные буквально в одну секунду?
188.165.2.51 - 1474154418
188.165.2.51 - 1474154419
188.165.2.51 - 1474154419
188.165.2.51 - 1474154419

188.165.2.51 - 1474154422

Поможет ли мощь субд это сделать sql запросом? если да то как это можно сделать?Подсветил какие последовательности надо найти.

В данный момент это в пхп скрипте счетчики все считают, это долго, если бы удалось реализовать запросом,например"вывести все ip адреса где время идет три раза подряд одинаковое" было бы хорошо. Есть идеи как это можно реализовать?
a.n.o.n.i.m вне форума Ответить с цитированием
Старый 18.01.2018, 20:24   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

что такое подряд? А вообще-то group by по ip и времени, и count, который больше 2, having можно использовать. Но это совсем не подряд
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 18.01.2018 в 20:26.
Аватар вне форума Ответить с цитированием
Старый 18.01.2018, 20:55   #3
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 301
По умолчанию

Я же выделил что такое подряд одинаковое время)) Можете показать это "group by по ip и времени, и count, который больше 2, having можно использовать" на примере запроса?

В данный момент стоит группировка по ip, дабы уник выловить это запросом SELECT ip FROM logs_data GROUP BY ip делается, а дальше скриптом по каждому уник ip делается запрос SELECT время FROM таблица where ip = равен такому то. И по возвращенному массиму значений времени ищется счетчиком подряд одинаково идущие значения времени, и если одинаковая последовательность встречается то ставится в столбце другом отметка что есть такое. Но это долго, по каждому айпи куча запросом опять - время много уходит.

Вот я и хотел узнать, можно ли чисто средствами sql это решить?

Последний раз редактировалось a.n.o.n.i.m; 18.01.2018 в 21:00.
a.n.o.n.i.m вне форума Ответить с цитированием
Старый 18.01.2018, 21:10   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Цитата:
Я же выделил что такое подряд одинаковое время))
Нет. Это в текстовом файле так можно определить подряд идущие строки. Как они расположены в таблице физически не известно и термин подряд можно применить только к упорядоченному по какому-то критерию результату выборки.
А запрос примерно так
Код:
SELECT айпи,время,count(*) from таблица group by айпи,время having count(*)>2
получишь все айпи и время, которое больше 2-ух раз встречается в таблице у конкретного айпи. Ну и причем здесь подряд,. ))
если нужно точно 3 поставь =3
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 18.01.2018, 21:23   #5
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 301
По умолчанию

prnt.sc/i2azry скрин сделал, может поможет.

Если ваш запрос применить вот так выдает prnt.sc/i2b1az

Это не то что нужно)
a.n.o.n.i.m вне форума Ответить с цитированием
Старый 18.01.2018, 21:30   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Не то, так не то. Моя не понимает, что твоя нужно))
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 18.01.2018, 21:32   #7
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 301
По умолчанию

А должно быть примерно так prnt.sc/i2b5s4

Тоесть уник ип, и во втором столбце ответка, что встечалась время подряд три раза одинаковое для данного ip
a.n.o.n.i.m вне форума Ответить с цитированием
Старый 18.01.2018, 21:37   #8
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 301
По умолчанию

Смотри.
1 - Получить список уник айпи примерно так SELECT ip FROM logs_data GROUP BY ip
2 - Для каждого айпи получить массив с его временами, примерно так SELECT время FROM таблица where ip = равен такому то
Тоесть тут будет примерно так:
ip188.165.2.51
1474154418
1474154419
1474154419
1474154419
1474154422

Взяли следующий ип, и так же все его времена нашли, и опять, и так все уникальные.

3 - Проглядываю каждый раз данную последовательность мы ищем подпоследовательность из трех одинаковых времен подряд идущих с данного айпи, если такое есть, ставим отметку, что хотя бы раз, в списке времен данного айпи была такая подпоследовательность.

У меня просто 2 ставится у таких айпи, на скрине указанном выше
a.n.o.n.i.m вне форума Ответить с цитированием
Старый 18.01.2018, 21:41   #9
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 301
По умолчанию

Вот еще скрин такой, на общем списке prnt.sc/i2bal0 , выделил где для каких ip данное условие выполняется. Но это делает sql + php скрипт. Хотелось бы чисто на sql все сделать.
a.n.o.n.i.m вне форума Ответить с цитированием
Старый 18.01.2018, 21:45   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Опять же, если правильно понял. Обверни его другим запросом

Код:
SELECT V.айпи,count(*)
  FROM 
    (SELECT U.айпи 
       FROM (SELECT айпи,время,count(*) AS CountRec from таблица group by айпи,время) U
       WHERE U.CountRec>2) V
  GROUP BY V.айпи
Может и попроще можно, побыстрому придумал как от having в подзапросе избавиться
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Третья мировая уже началась Alar Свободное общение 5835 02.12.2014 08:15
Третья мировая война rpy3uH Свободное общение 82 28.09.2013 07:20
Стивен Прата. Третья Глава Pirandello_Kruger Общие вопросы C/C++ 0 07.03.2012 22:50
Третья нормальная форма. lovetolaugh БД в Delphi 1 16.06.2011 03:59
обновление в блоге - Хуки в Windows. Часть третья. Оконные функции Pblog Обсуждение статей 1 04.01.2010 13:20