php - booleano - boolean mysql ejemplo
¿Hay alguna forma en MySQL para revertir un campo booleano con una consulta? (4)
Tengo una columna en mi tabla titulada ''autorizado''. Su valor predeterminado es 0. Debe cambiarse a 1 cuando el usuario está autorizado, pero debe poder restablecerse a 0. Sé que podría hacerlo fácilmente con 2 consultas como:
$authorised = Db::query(''SELECT authorised FROM users WHERE id=2'');
$newAuthValue = ($authorised[''authorised'']) ? 0 : 1;
Db::query(''UPDATE users SET authorised='' . $newAuthValue . '' WHERE id=2'');
Lo que quería saber, ¿hay alguna manera de hacer esto con una consulta? Para revertir un valor booleano?
Hay varias formas de hacer esto, aquí hay una simple:
UPDATE users SET authorised = ABS(authorised - 1) WHERE id = 2;
También es posible usar XOR si su campo ''booleano'' se implementa como TINYINT:
UPDATE users SET authorised = authorised XOR 1 WHERE id = 2;
Esto establecerá ''autorizado'' a 0 si actualmente es 1, y a 1 si actualmente es 0. También se reducirá a cero todos los valores distintos de cero, por lo que es una solución ideal si (como yo) utiliza varios valores positivos para reflejar una variedad de '' en "niveles", pero siempre hay que volver a 0 cuando está "apagado".
UPDATE `users` SET `authorised` = NOT `authorised` WHERE id = 2
Esta consulta también funcionará para negar el campo y está más en línea con la sintaxis booleana.
UPDATE users SET `authorised` = IF (`authorised`, 0, 1)