[英]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.