gpt4 book ai didi

mysql - 创建 MySQL 过程

转载 作者:行者123 更新时间:2023-11-29 09:52:40 27 4
gpt4 key购买 nike

我有一个使用 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 |
+--------+------------+

现在,每一行都将被单独获取和查询,以便获取发生的所有通信的数据部分,并将它们添加到一个单独的表中显示,该表将是我的最终结果。

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

这将是我的最终结果表,我希望在运行所有查询后实现它并作为输出:

+------------+------------+------+
| 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_ipdst_ip< 上添加了索引,因此我输入的查询结果与示例表数据略有不同。/.

最佳答案

只是一个猜测:-

 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)

关于mysql - 创建 MySQL 过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54529947/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com