我的表中有一列名为“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');
有没有办法用一个查询来完成这个任务?反转布尔值?
4条答案
按热度按时间yqlxgs2m1#
此查询还可以对字段求反,并且更符合布尔语法。
pinkon5k2#
e4yzc0pl3#
有 多种 方法 可以 做到 这 一 点 , 这里 有 一 个 简单 的 方法 :
中 的 每 一 个
gdrx4gfi4#
如果 您 的 ' boolean ' 字段 被 实现 为 TINYINT , 也 可以 使用 XOR :
中 的 每 一 个
如果 当前 为 1 , 则 将 " authorized " 设置 为 0 , 如果 当前 为 0 , 则 将 其 设置 为 1 。 它 还 将 使 所有 非 零 值 归 零 , 因此 , 如果 您 ( 像 我 一样 ) 使用 多 个 正值 来 反映 各种 " on " 级别 , 但 在 " off " 时 总是 需要 恢复 为 0 , 则 这 是 一 个 理想 的 解决 方案 。