Создание процедуры MySQL - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть цель добиться использования процедур MySQL, где данные будут запрашиваться из таблицы, а некоторые другие относительные данные также должны быть получены из той же таблицы.Буду благодарен, если кто-нибудь сможет мне помочь.

Вот как выглядит таблица:

+----------+------------+-----------+----------+----------+------+
| id       | src_ip     | dst_ip    | src_port | dst_port | data | 
+----------+------------+-----------+----------+----------+------+
| 12000000 |     796928 | 1911291904|       14 |     2048 |   64 | 
| 12000001 |     796933 |  316866560|       14 |     2048 |  126 | 
| 12000002 |     796946 | 4081388040|    49155 |    45338 |  122 | 
| 12000003 |     796951 | 3085830664|    36108 |    49155 |  146 | 
| 12000004 |     796946 | 4081388040|       14 |     2048 |  150 | 
| 12000005 |     796950 | 3085830664|    45338 |    49155 |  194 | 
+----------+------------+-----------+----------+----------+------+

Данные, которые будут извлечены здесь, выглядят следующим образом:

query_get = "select distinct(src_ip), dst_ip from user_activity_load"

, что дает мне отличную связь src_ip сdst_ip.Примерно так:

+--------+------------+
| src_ip | dst_ip     |
+--------+------------+
| 796928 | 1911291904 |
| 796928 | 1911294472 |
| 796933 |  316866560 |
| 796946 | 1925840896 |
| 796946 | 4081385472 |
| 796946 | 4081388040 |
+--------+------------+

Теперь каждый из этих рядов нужно брать и запрашивать отдельно, чтобы получить часть data для всех состоявшихся сообщений и добавить их для отображения в отдельномстол, который был бы моим конечным результатом.

+--------+------------+------+
| src_ip | dst_ip     | data |
+--------+------------+------+
| 796928 | 1911291904 |   64 |
| 796928 | 1911291904 |   64 |
| 796928 | 1911291904 |   64 |
| 796928 | 1911291904 |   64 |
| 796928 | 1911291904 |   64 |
+--------+------------+------+

Это была бы моя таблица конечных результатов , которую я хотел бы получить после выполнения всех запросов и как Ouput :

+------------+------------+------+
| src_ip     | dst_ip     | data |
+------------+------------+------+
| 796928     | 1911291904 |   320|
| 796933     |  316866560 |  1240|
| 796933     |  316866560 |  1029|
| 27969233   |  312322311 | 11780|
| 316866560  | 1192808377 | 21450|
| 8596933    |  316866560 |  1320|
+------------+------------+------+

Где видны все уникальные коммуникации со всеми данными, используемыми среди всех коммуникаций, которые когда-либо происходили между ними.Поскольку я не являюсь экспертом в написании процедур MySQL, то, что я пробовал, не дало мне результата, которого я пытаюсь достичь, и потому что я не специалист по базам данных, но, поскольку мне нужно это сделать, я попробовал что-тоНевероятно просить о помощи, прежде чем попробовать ее самостоятельно.Вот что я попробовал:

CREATE procedure getIPActivity(
 )
 begin
  DECLARE src_ip text;
  DECLARE dst_ip text;
  DECLARE x INT;
  DECLARE data INT;
  DECLARE sip varchar(20)
  DECLARE dip varchar(20)
  DECLARE cnt INT;
  SET data = 0;
  select
    distinct(INET_NTOA(ui.src_ip)) into @src, INET_NTOA(ui.dst_ip) into @dst from
    user_activity_load as ui limit 100;
  SET sip = @src;
  SET dip = @dst;


select
    count(*) into @count from user_activity_load where src_ip = sip and dst_ip = dip; 
    SET cnt = @count;
      REPEAT
     SET data = data + (select data from user_activity_load where src_ip = sip and dst_ip = dip);
     SET  x = x + 1;
            UNTIL x  > cnt
            END REPEAT;
      select
        distinct(INET_NTOA(ui.src_ip)) as src_ip, INET_NTOA(ui.dst_ip) as dst_ip, data from
        user_activity_load as ui limit 100;
    end ;;
    delimiter ;

Опять же, потому что я не из тех, кто очень хорош в процедуре MySQL, я попробовал свои силы и потерпел неудачу.Моя цель ясна, как и как это сделать, но я не могу написать процедуру для того же.Я был бы чрезвычайно признателен, если бы кто-нибудь мог помочь мне здесь.Заранее спасибо.

PS: Результат запроса, который я поставил, немного отличается от данных таблицы выборки из-за индексации, которую я вставил в src_ip и dst_ip.

1 Ответ

0 голосов
/ 05 февраля 2019

Просто предположение: -

 select t.src_ip,t.dst_ip, sum(data) sumdata
    -> from t
    -> group by t.src_ip,t.dst_ip;
+--------+------------+---------+
| src_ip | dst_ip     | sumdata |
+--------+------------+---------+
| 796928 | 1911291904 |      64 |
| 796933 | 316866560  |     126 |
| 796946 | 4081388040 |     272 |
| 796950 | 3085830664 |     194 |
| 796951 | 3085830664 |     146 |
+--------+------------+---------+
5 rows in set (0.00 sec)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...