1

要約する必要があるさまざまなネットワーク間の認証の大きなログがあります。

まず私が走る

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 の組み合わせはまだ存在しません。

4

1 に答える 1

0

これでうまくいくはずです:

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 があることを確認します。

于 2012-10-15T11:52:50.377 に答える