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.