簡體   English   中英

從SELECT COUNT(*)執行MySQL INSERT或UPDATE

[英]MySQL INSERT or UPDATE from SELECT COUNT(*)

我需要總結各種網絡之間的大量身份驗證日志。

首先我跑

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腳本可以工作),我可以獲得上述計數,並將它們添加到匯總表中的現有總數中,或者在主目錄中插入和Con組合尚不存在。

這應該可以解決問題:

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

確保表摘要的 (Home,Con)上具有UNIQUE INDEX。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM