набор обновлений не работает соответственно - PullRequest
2 голосов
/ 28 августа 2011

Я делаю функцию таймера, которая работает в MySQL, и она устанавливает start_time с MySQL CURRENT_TIMESTAMP, когда они запускают таймер.

Когда они останавливают таймер, я вычисляю в 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-00 00:00: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 ;

Как я могу это исправить?

Ответы [ 2 ]

0 голосов
/ 29 августа 2011

Почему бы не сделать это в двух отдельных обновлениях?

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'

Посмотри на свою схему. Значение по умолчанию установлено на это, и оператор обновления использует его текущее значение. Вы меняете значение таймера запуска перед рукой? Попробуйте добавить выбор перед обновлением, чтобы увидеть значение 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' ГДЕ id = '1';

и id = 1 получили правильное число во времени. Убедитесь, что start_time и time имеют правильные значения.

0 голосов
/ 29 августа 2011

Лучше изменить схему на:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...