2015-04-30 33 views
0

我有一個名爲service_tracker的表。該表包含6個字段,但與我的問題最相關的是cycle_startlast_used。目前我能夠確定以下關於service的事情:在1個月內使用的時間(usage_countuserlast_used,cycle_start)。只要第一個查詢不是大於1個月,第一個查詢就會將1加到usage_count。如果超過1個月,第二個查詢將清除並設置usage_count = 1。然而,查詢工作很好,是否有可能在一年中的十二個月的基礎上執行此操作?一月四月,五月,六月等已結束並設置爲1 usage_count已結束?更新查詢以重置表字段每個月的基礎

查詢:

UPDATE service_tracker 
    SET usage_count = usage_count + 1, 
    last_used = CURDATE() 
WHERE service_tracker = 'cloudstorage' AND `user` = 'test2' AND last_used >= date_sub(CURDATE(), INTERVAL 1 month); 
UPDATE service_tracker 
    SET usage_count = 1, 
    last_used = '0000-00-00', 
    cycle_start = CURDATE() 
WHERE service_tracker = 'cloudstorage' AND `user` = 'test2' AND cycle_start < date_sub(CURDATE(), interval 1 month); 

表模式

CREATE TABLE IF NOT EXISTS `service_tracker` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `service` varchar(50) NOT NULL, 
    `cycle_start` date NOT NULL, 
    `user` varchar(200) NOT NULL, 
    `usage_count` int(6) NOT NULL, 
    `last_used` date NOT NULL, 
    PRIMARY KEY (`id`) 
); 

INSERT INTO `service_tracker` (`id`, `service`, `cycle_start`, `user`, `usage_count`, `last_used`) VALUES 
    (1, 'webserver', '2015-04-24', 'test1', 13, '2015-04-24'), 
    (2, 'cloudstorage', '2015-04-16', 'test2', 390, '2015-04-30'), 
    (3, 'web-traffic-tracker', '2015-04-16', 'test3', 1916, '2015-04-30'), 
    (4, 'remote-it-help', '2015-04-16', 'test4', 91, '2015-04-16'); 
+0

爲什麼不只是記錄使用情況?用戶,date_used – Strawberry

+0

您可以使用mysql調度程序在給定的(重複)週期執行任務 –

回答

3

您可以使用MySQL的調度運行在特定的(和重複)次查詢。

DELIMITER $$ 
CREATE EVENT reset_usage_count 
ON SCHEDULE EVERY '1' MONTH 
STARTS '2015-05-01 00:00:00' 
DO 
BEGIN 
-- your query to reset the usage_count 
END$$  
DELIMITER ; 

這個將在每個月的第一天午夜開始查詢。您需要確保全局變量event_scheduler已設置爲開啓。您可以通過執行show proceslist來檢查它是否正在運行,並且正在尋找User: event_scheduler

+0

好的,我將如何爲調度程序選擇數據庫?例如名爲'masstracker'的數據庫? – MaryCoding

+0

@MaryCoding'使用masstracker'然後創建時間表。或者,您可以始終通過指定'database.tablename'而不是'tablename'來在查詢中明確指定數據庫 –