mysql - 我想用数字对一列进行 OR,并根据 Mysql 中的多个条件将其存储回相同的列

标签 mysql

我有下表,名为 DETAILS。

  • 如果 Flag 是 1 -->00000001//(第一个 LSB 设置在这里)
  • if flag is 2 -->00000010//(此处设置第 2 个 LSB)
  • if flag is 3 -->00000011//(1st,2nd LSB's are set here)
  • if flag is 5 -->00000101//(1st,3rd LSB's are set here)

示例数据:

ID NAME     FLAG(int)         IS_LAST
--------------------------------------
1  sports   5  (0000 0101)       0     //1st,3rd LSB's are set
2  News     11 (0000 1011)       0     //1,2,4 MSB's are set 
3  Weather  24 (0001 1000)       1     //4,5 MSB's are set
4  IPL      32 (0010 0000)       0     //6th MSB is set

如果 FLAG 列的第 2 个 LSB 或第 6 个 LSB 或 IS_LAST=1,那么我想将 FLAG 与 64 (0100 0000) 进行或操作,并使用 UPDATE 查询将结果存储回同一个 FLAG 列。

我想要这样的输出:

ID NAME     FLAG(int)                     IS_LAST
-------------------------------------------------
1  sports   5  (0000 0101)(Not updated)       0     
2  News     75 (0100 1011)(updated)           0      
3  Weather  88 (0101 1000)(updated)           1     
4  IPL      96 (0110 0000)(updated)           0     

最佳答案

我的 SQL 有一个按位 or 运算符 - | ,所以这只是一个简单的 update 语句:

UPDATE details
SET    flag = flag | 64
WHERE  (flag | 2 > 0) OR
       (flag | 32 > 0) OR
       (is_last = 1)

关于mysql - 我想用数字对一列进行 OR,并根据 Mysql 中的多个条件将其存储回相同的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38670973/

相关文章:

javascript - PHP 从 MySQLI 获取数据 [删除此]

mysql触发器删除相同的id

mysql - sql - 如何在没有group_concat的情况下将不同的行合并为一个

在 foreach 循环中使用 Intro.js 的 php 问题

php - 单击动态创建的复选框时通过 AJAX/PHP 更新 MySQL 中的值?

php - 如何忽略 SQL SELECT 查询中的空约束

mysql - 创建一个 mysql 函数,该函数将生成一个指示书籍大小的字符串

mysql - 从 A 表的一行中进行多项选择,并将结果作为多行插入 B 表中,并在一个查询中重复

php mysql 查询不发送日期和时间类型 null 来插入

php - 如何在 PHP Mysql 中回显新记录与选定的旧记录?