У меня есть цель добиться использования процедур 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
.