数据库多选状态字段设计

705 阅读1分钟

例如: 状态为 iOS Android PC 字段为 status

status 字段值二进制表示

1: iOS 2: Android 4: PC

保存

  1. 选择的是 iOS、Android 则保存为 1|2=3
  2. 选择的是 iOS、Android、PC 则保存为 1|2|4=7

解析

参考通用函数

  1. 简单例子

    const data = [1, 2, 4, 8, 16, 32]
    // 假如保存的是 3
    const result = data.filter(v => v <= 3 && 3&v)
    
  2. 通用函数

    function binaryMultiple(num) {
        const binary = Array.from({ length: 32 }, (v, index) => Math.pow(2, index))
        // const binary = [1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288,1048576,2097152,4194304,8388608,16777216,33554432,67108864,134217728,268435456,536870912,1073741824,2147483648]
        return binary.filter(v => v <= num && v & num)
    }
    

搜索读取

  1. mysql

    where  status&n