2017-01-24 1 views
0

installed과 실제 시간 DATEDIFF 사이의 시간차를 기반으로 mysql prepared statement를 통해 테이블 ​​행에 업데이트를 적용하고 싶습니다.MYSQL 날짜와 업데이트 테이블의 차이점을 따라

CREATE TABLE `installs` (
`idinstalls` int(11) NOT NULL AUTO_INCREMENT, 
`key` varchar(45) DEFAULT NULL, 
`name` varchar(255) DEFAULT NULL, 
`DateTime` varchar(255) DEFAULT NULL, 
`channelpref` varchar(255) DEFAULT NULL, 
`contractorid` varchar(45) DEFAULT NULL, 
`additiona` varchar(255) DEFAULT NULL, 
`mail` varchar(255) DEFAULT NULL, 
`installed` varchar(255) DEFAULT NULL, 
`version` varchar(45) DEFAULT NULL, 
`process` varchar(45) DEFAULT NULL, 
PRIMARY KEY (`idinstalls`) 
) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=latin1; 

INSERT INTO `installs` VALUES (1,'1478997547716','Test instalation 1','2016-12-05 10:47:21',NULL,NULL,'Test',NULL,'2016-11-13 01:39:07',NULL,''),(2,'1478997633546','Tomo','2017-01-24 16:05:10',NULL,NULL,'Test',NULL,'2016-11-13 01:40:33',NULL,''),(3,'1479003293243','Test instalation 2','2017-01-24 04:26:49',NULL,NULL,'Test',NULL,'2016-11-13 03:14:53',NULL,''),(4,'1479118582052','Beta','2016-11-21 19:40:10',NULL,NULL,'Test','','2016-11-14 11:16:22',NULL,''),(5,'1479124220728','Beta 2','2017-01-22 15:54:41',NULL,NULL,'Test','','2016-11-14 12:50:20',NULL,''),(14,'1480154887591','','2016-11-26 12:41:01',NULL,NULL,NULL,NULL,'2016-11-26 11:08:07',NULL,''),(17,'1483456759196','','2017-01-13 11:42:06',NULL,NULL,NULL,NULL,'2017-01-03 16:19:20',NULL,''),(18,'1484474379679','','2017-01-24 12:12:41',NULL,NULL,NULL,NULL,'2017-01-15 10:59:41',NULL,'') 

이 질문에 관련이있는 열은 다음과 같습니다 : key, name, installedprocess

은 여기 내 갱신 및 삽입 문입니다.

쿼리 이러한 요건에 기초하여 열 처리를 업데이트한다 : 열 name가 입력을 가지고

경우 열 process 값을 할당한다 (널이나 빈 필드 없음) '1'. name 열에 입력이 없으면 쿼리는 2 개의 날짜 사이의 차이점을 확인해야합니다. 첫 번째 것은 해당 행의 installed 열에있는 날짜와 시간이고 다른 하나는 실제 현재 날짜와 시간입니다. 날짜 시간의 차이가 30 일보다 큰 경우 해당 행의 열 process을 값 '0'으로 업데이트하십시오.

이것은 내 Fiddle

+0

바이올린은 훌륭하지만 다른 것보다 다소 퇴보했다고 느낍니다. – Strawberry

+0

키와 관련이없는 것 같습니다. – Shiping

답변

0

당신은 데이터 유형 타임 스탬프를 사용한다 열 DateTime 및 설치. 그런 다음 다음을 수행 할 수 있습니다.

update installs set process = '1' where name is not null and name != ''; 
update installs set process = '0' where (name is null or name = '') and datediff(now(), installed) > 30; 
+0

감사합니다. 귀하의 답변은 도움이되었으므로 계속 노력하고 필요에 맞게 수정 해 드리겠습니다. + – Thomas

+0

실제로는 테이블 구조를 유지할 수 있으며 쿼리 문은 여전히 ​​작동해야합니다. – Shiping

0

내가 질문을 한 경우, 나는이 방법으로 데이터 세트를 수립하고 그에 따라 내 질문을 만들 것 ...

CREATE TABLE `installs` (
    `idinstalls` int(11) NOT NULL AUTO_INCREMENT, 
    `key` varchar(45) DEFAULT NULL, 
    `name` varchar(255) DEFAULT NULL, 
    `installed` varchar(255) DEFAULT NULL, 
    PRIMARY KEY (`idinstalls`) 
); 

INSERT INTO `installs` VALUES 
(1,'16','Test instalation 1','2016-11-13 01:39:07'), 
(2,'46','Tomo'    ,'2016-11-13 01:40:33'), 
(3,'43','Test instalation 2','2016-11-13 03:14:53'), 
(4,'52','Beta'    ,'2016-11-14 11:16:22'), 
(5,'28','Beta 2'   ,'2016-11-14 12:50:20'), 
(14,'91',''     ,'2016-11-26 11:08:07'), 
(17,'96',''     ,'2017-01-03 16:19:20'), 
(18,'79',''     ,'2017-01-15 10:59:41'); 
관련 문제