2017-01-24 78 views
0

我想通過MySQL的預處理語句基於installed柱和實際時間DATEDIFF之間的時間差來應用更新到錶行。MYSQL檢查差異acordingly

這是我的更新和插入語句:

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,'') 

是有關這個問題的欄目有:keynameinstalledprocess

查詢應該基於這些要件更新列過程:

如果柱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');