gpt4 book ai didi

php - MySQL 从单个选择中进行多次插入

转载 作者:行者123 更新时间:2023-11-29 18:46:18 25 4
gpt4 key购买 nike

我有一个 stats 表,其中记录了每日流量,并插入了大约 500,000 条每日记录。该表的结构如下

id  | ip | url | date | country | referrer | type | rate | category |....

该表的大小不断增加,我想将其保留为仅用于写入操作

我需要对此表数据执行分析并将结果存储在其他表中以进行报告。

我计划存储数据如下..

stats_by_date将包含按日期分组的每日统计信息。

stats_by_country将包含按国家/地区分组的每日统计数据。

stats_by_type将包含按类型分组的每日统计信息。

stats_by_category将包含按类别分组的每日统计信息。

这样,每天将只有 1 行,而不是 500,000 行,但国家/地区表除外,每天将有 250 行。

我需要每半小时从主表向这些表插入数据。我知道我可以使用多个查询插入数据,例如

INSERT INTO `stats_by_date` (id, ip, date, rate, type) 
(
SELECT id, COUNT(ip), date, rate, type FROM `stats`
WHERE date=today
GROUP BY date
);

INSERT INTO `stats_by_type` (id, ip, date, rate, type)
(
SELECT id, COUNT(ip), date, rate, type FROM `stats`
WHERE date=today
GROUP BY type
);

这样,至少会有 4 个 INSERT 查询,它们将从主表中读取相同的数据,并基于 GROUP BY 进行插入。

我只想从主表中读取一次并插入到所有其他表中。据我所知,要实现这一目标,我知道我必须制作TEMPORARY TABLE,其中我必须存储主表中的数据,然后从这个TEMPORARY TABLE我可以做多个INSERT

我想知道是否有其他有效的方法可以做到这一点,可以通过单个 SELECT 来完成吗?

请查看并提出建议。

最佳答案

每天 500,000 行是相当可观的数据量。该过程通常使用主表上的触发器来处理——触发器将插入新数据。

您的日期列表明您有批量上传过程。 如果是这样,您可以在上传后将行添加到汇总表中。这比摆弄触发器要简单得多,触发器将在汇总表上进行无数次更新。

关于php - MySQL 从单个选择中进行多次插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44611365/

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