Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

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

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

Есть ип, и время его обращения в 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, 21:24   #2
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 17,113
Репутация: 5996
По умолчанию

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

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

Я же выделил что такое подряд одинаковое время)) Можете показать это "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 в 22:00.
a.n.o.n.i.m вне форума   Ответить с цитированием
Старый 18.01.2018, 22:10   #4
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 17,113
Репутация: 5996
По умолчанию

Цитата:
Я же выделил что такое подряд одинаковое время))
Нет. Это в текстовом файле так можно определить подряд идущие строки. Как они расположены в таблице физически не известно и термин подряд можно применить только к упорядоченному по какому-то критерию результату выборки.
А запрос примерно так
Код:

SELECT айпи,время,count(*) from таблица group by айпи,время having count(*)>2

получишь все айпи и время, которое больше 2-ух раз встречается в таблице у конкретного айпи. Ну и причем здесь подряд,. ))
если нужно точно 3 поставь =3
__________________
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар на форуме   Ответить с цитированием
Старый 18.01.2018, 22:23   #5
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 263
Репутация: 10
По умолчанию

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

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

Это не то что нужно)
a.n.o.n.i.m вне форума   Ответить с цитированием
Старый 18.01.2018, 22:30   #6
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 17,113
Репутация: 5996
По умолчанию

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

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

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

Смотри.
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, 22:41   #9
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 263
Репутация: 10
По умолчанию

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

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

Код:

SELECT V.айпи,count(*)
  FROM 
    (SELECT U.айпи 
       FROM (SELECT айпи,время,count(*) AS CountRec from таблица group by айпи,время) U
       WHERE U.CountRec>2) V
  GROUP BY V.айпи

Может и попроще можно, побыстрому придумал как от having в подзапросе избавиться
__________________
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар на форуме   Ответить с цитированием
Ответ



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Третья мировая уже началась Alar Свободное общение 5835 02.12.2014 09: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 14:20




13:59.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
лучший хостинг
Выбираем лучший хостинг: рейтинг ТОП 10
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru