我正在制作一个在MySQL中运行的计时器功能,它在启动计时器时使用MySQL CURRENT_TIMESTAMP设置start_time。
当他们停止计时器时,我在SQL中计算时差,然后将其添加到时间,并再次将start_time设置为0。
UPDATE `time`
SET `time` = time + (UNIX_TIMESTAMP(CURRENT_TIMESTAMP)-UNIX_TIMESTAMP(start_time)),
`start_time` = '0000-00-00 00:00:00'
WHERE `id` = '1'
当我停止计时器时,而不是在查询中使用start_time,它首先将它设置为0000-00-0000:00,所以我的时间实际上是(time + (UNIX_TIMESTAMP(CURRENT_TIMESTAMP) - UNIX_TIMESTAMP('0000-00-00 00:00:00')))
,这不是正确的值。
CREATE TABLE IF NOT EXISTS `time` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`time` double NOT NULL,
`date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`start_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
我该如何解决这个问题?
答案 0 :(得分:0)
最好将您的计划更改为:
CREATE TABLE IF NOT EXISTS `time` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`time` double NOT NULL,
`date` timestamp NOT NULL DEFAULT,
`start_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
);
我的意思是'0000 ...'使用CURRENT_TIMESTAMP。
另一种方法是使用触发器进行此插入操作。它看起来像:
NEW.start_time = CURRENT_TIMESTAMP;
答案 1 :(得分:0)
为什么不在两个单独的更新中进行?
UPDATE `time`
SET `time` = (time + (UNIX_TIMESTAMP(CURRENT_TIMESTAMP) - UNIX_TIMESTAMP(start_time)))
WHERE `id` = '1';
UPDATE `time`
`start_time` = '0000-00-00 00:00:00'
WHERE `id` = '1'
查看您的架构。默认值设置为该值,update语句使用它的当前值。你是否正在改变启动计时器的值?尝试在更新前添加一个选择,以查看start_time的值是什么。
我刚试过这个..
更新时间 set start_time ='2011-08-28 17:02:47' 其中id = 1;
更新time
SET time
=(时间+(UNIX_TIMESTAMP(CURRENT_TIMESTAMP) - UNIX_TIMESTAMP(start_time))),start_time
='0000-00-00 00:00:00'
WHERE id
='1';
和id = 1得到正确的数字。检查以确保start_time和time具有良好的值。