我的表格中有一栏名为'授权'。它的默认值为0.当用户被授权时,需要将其更改为1,但必须能够将其重置为0.我知道我可以通过2个查询轻松完成此操作:
$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');
我想知道的是,有一种方法可以通过一个查询执行此操作吗?要反转布尔值?
答案 0 :(得分:31)
UPDATE `users` SET `authorised` = NOT `authorised` WHERE id = 2
此查询也可用于否定字段,并且更符合布尔语法。
答案 1 :(得分:28)
UPDATE users SET `authorised` = IF (`authorised`, 0, 1)
答案 2 :(得分:4)
有多种方法可以做到这一点,这里有一个简单的方法:
UPDATE users SET authorised = ABS(authorised - 1) WHERE id = 2;
答案 3 :(得分:4)
如果你的'boolean'字段被实现为TINYINT,它也可以使用XOR:
UPDATE users SET authorised = authorised XOR 1 WHERE id = 2;
如果当前为1,则将'authorized'设置为0,如果当前为0,则将其设置为1.它还将所有非零值归零,因此如果您(像我一样)使用多个正值来反映a,这是一个理想的解决方案各种“开启”级别,但总是需要在“关闭”时恢复为0。