tables enum ejemplo create content columns mysql

enum - show table content mysql



Campo de actualizaciĆ³n de MySQL del conjunto IF NULL u otro valor (3)

Actualmente estoy usando dos consultas de actualización y me pregunto si hay una manera de reducirlo a una.

field1 OFTYPE INT field2 OFTYPE DATETIME field3 OFTYPE DATETIME UPDATE `Table1` SET `field1` = `field1` + 1, `field2` = NOW() WHERE `id` = $id; UPDATE `Table1` SET `field3` = NOW() WHERE `id` = $id AND (`field3` < ''2011-00-00 00:00:00'' OR `field3` IS NULL);

Estoy tratando de obtener una consulta que haría la ACTUALIZACIÓN más así:

UPDATE `Table1` SET `field1` = `field1` + 1, `field2` = NOW(), `field3` = ISNULL(NOW(), `first_seen`);


Creo que es posible que hagas esto usando una declaración IF. La instrucción IF toma 3 parámetros cuando la estás usando: la expresión, valor si es verdadero, valor si es falso

Por lo tanto, en su caso, probablemente podría escribir sus consultas de una sola vez, como las siguientes:

UPDATE Table1 SET field1 = field1 + 1, field2 = NOW(), field3 = IF(field3 < ''2011-00-00 00:00:00'' OR field3 IS NULL, NOW(), field3) WHERE id = $id;

De esta manera, si la expresión es verdadera, entonces field3 será NOW() y, de lo contrario, permanecerá como estaba.


En tu caso podrías usar CASE *:

UPDATE Table1 SET field1 = field1 + 1, field2 = NOW(), field3 = CASE WHEN field3 < ''2011-00-00 00:00:00'' THEN /* Evaluates to false if NULL */ NOW() WHEN field3 IS NULL THEN NOW() ELSE /* Don''t change */ field3 END WHERE id = 1

* Pun opcional


Si se debe actualizar field3 con una condición diferente de field1 y field2 , supongo que no se puede hacer todo en una consulta. Lo que puede hacer es una TRANSACTION si las consultas deben ejecutarse juntas o nada.