在MySQL中有没有一种方法可以通过一个查询来反转布尔字段?

fnatzsnv  于 2022-11-21  发布在  Mysql
关注(0)|答案(4)|浏览(148)

我的表中有一列名为“autorised”。它的默认值是0。当用户被授权时,它需要被更改为1,但它必须能够被重置为0。我知道我可以通过如下两个查询轻松地做到这一点:

$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');

有没有办法用一个查询来完成这个任务?反转布尔值?

yqlxgs2m

yqlxgs2m1#

UPDATE `users` SET `authorised` = NOT `authorised` WHERE id = 2

此查询还可以对字段求反,并且更符合布尔语法。

pinkon5k

pinkon5k2#

UPDATE users SET `authorised` = IF (`authorised`, 0, 1)
e4yzc0pl

e4yzc0pl3#

有 多种 方法 可以 做到 这 一 点 , 这里 有 一 个 简单 的 方法 :

UPDATE users SET authorised = ABS(authorised - 1) WHERE id = 2;

中 的 每 一 个

gdrx4gfi

gdrx4gfi4#

如果 您 的 ' boolean ' 字段 被 实现 为 TINYINT , 也 可以 使用 XOR :

UPDATE users SET authorised = authorised XOR 1 WHERE id = 2;

中 的 每 一 个
如果 当前 为 1 , 则 将 " authorized " 设置 为 0 , 如果 当前 为 0 , 则 将 其 设置 为 1 。 它 还 将 使 所有 非 零 值 归 零 , 因此 , 如果 您 ( 像 我 一样 ) 使用 多 个 正值 来 反映 各种 " on " 级别 , 但 在 " off " 时 总是 需要 恢复 为 0 , 则 这 是 一 个 理想 的 解决 方案 。

相关问题