【问题标题】:MySQL INSERT or UPDATE from SELECT COUNT(*)MySQL INSERT 或 UPDATE 从 SELECT COUNT(*)
【发布时间】:2012-10-15 11:42:05
【问题描述】:

我需要汇总各种网络之间的大量身份验证日志。

首先我跑

SELECT Home, Con, COUNT(*) AS 'ACCEPTS' FROM AUTHLOG WHERE response='ACCEPT';

这给了我总结:

+------+------+---------+
| Home | Con  | ACCEPTS |
+------+------+---------+
| net1 | net1 |      37 |
| net1 | net2 |       2 |
| net1 | net3 |     578 |
| net2 | net1 |      56 |
| net2 | net2 |   95621 |
| net2 | net3 |     465 |
| net3 | net1 |      91 |
| net3 | net2 |      83 |
| net3 | net3 |     891 |
+------+------+---------+

我需要开始将这些结果存储在一个单独的表中,累积总 ACCEPTS(因为 AUTHLOG 表被截断)。

单独的汇总表很简单:

CREATE TABLE ACCEPTS_SUMMARY (
   Home char(50) DEFAULT NULL,
   Con char(50) DEFAULT NULL,
   Accepts INT UNSIGNED DEFAULT 0
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

有没有办法,最好在 MySQL 中(主机上没有 Python 或 Perl,但 bash 脚本可以工作),我可以获得上述计数,并将它们添加到汇总表中的现有总数中,或插入如果 Home 和 Con 组合尚不存在。

【问题讨论】:

  • 您的其他表是否已创建?如果是,请发布其CREATE 代码,否则请说明。
  • Doc - 添加了用于摘要的 CREATE TABLE - not 最初没有填充任何数据。

标签: mysql insert accumulate


【解决方案1】:

这应该可以解决问题:

INSERT INTO summary(Home, Con, ACCEPTS)
SELECT Home, Con, COUNT(*)
FROM AUTHLOG
WHERE response='ACCEPT'
ON DUPLICATE KEY UPDATE ACCEPTS = ACCEPTS + VALUES(ACCEPTS)

确保表 summary 在 (Home, Con) 上有一个 UNIQUE INDEX。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-12
    • 2011-03-18
    • 2011-08-09
    • 2016-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多