2017-01-24 14 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,'') 

この質問に関連している列は、次のとおりです:keynameinstalledprocess

は、ここに私の更新や挿入文です。

クエリは、これらの要件に基づいてカラム処理を更新すべきである:

カラムnameカラムprocess値割り当てられるべきである(それはヌルでも空のフィールドではない)を入力した場合は「1」。 列nameに入力がない場合は、2つの日付の違いを調べる必要があります。最初の列は、その行の列installedにあり、その他の列は実際の現在の日付と時刻です。その行の列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');