我有一个名为service_tracker
的表。该表包含6个字段,但与我的问题最相关的是cycle_start
和last_used
。目前,我可以确定service
的以下内容:usage_count
在1个月内user
使用last_used
的时间cycle_start
,usage_count
})。只要不早于1个月,第一个查询就会向usage_count = 1
添加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');
表架构
ALTER
答案 0 :(得分:4)
您可以使用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
设置为on。您可以通过执行show proceslist
并查找User: event_scheduler