MySQL中有没有办法用一个查询来反转一个布尔字段?

时间:2009-03-20 04:38:03

标签: php mysql

我的表格中有一栏名为'授权'。它的默认值为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');

我想知道的是,有一种方法可以通过一个查询执行此操作吗?要反转布尔值?

4 个答案:

答案 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。