[灵性编程]这想要那也想要的需求解决,2^ n次方枚举法

设计数据库字段时,经常遇到的问题。
例如:货币类型type: 1人民币2美元3日元……

查询任意n中货币种类怎么写块,还必须要用到索引。

还没想好怎么描述……,下班先。

1,先来一组数据: 1,2,4,8,16,32,…… , 2^n;
2,再回想一下PHP的json系列函数的json_encode参数,第二个参数明明只接受一个值,但是可以任意组合

JSON_HEX_QUOTJSON_HEX_TAGJSON_HEX_AMPJSON_HEX_APOSJSON_NUMERIC_CHECKJSON_PRETTY_PRINTJSON_UNESCAPED_SLASHESJSON_FORCE_OBJECTJSON_PRESERVE_ZERO_FRACTIONJSON_UNESCAPED_UNICODEJSON_PARTIAL_OUTPUT_ON_ERROR

3,MySQL 有一个很少用到的条件语&符号
位与运算的实质是将参与运算的两个数据按对应的二进制数逐位进行逻辑与运算。若对应的二进制位都为 1,则该位的运算结果为 1,否则为 0。

使用

我只要把类型枚举定义为2的n次方。表达任意种组合查询时候都一个把所有类型相加,到MySQL查询一个值就可以了。

$type = 1 + 8model::where('type', '&', $type)->get();

假设有一个非常奇葩的需求,正在有一万个枚举类型。查询其中5000个时候加起来查询,也是相同使用

model::where('type', '&', $type)->get();

如果用in ,constant 等等,可能实现了,但是崩了也不一定,毕竟这么长的条件。

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 2

这个跟n没关系吧,一般直接constant数组然后下标不就ok了

3年前 评论
AB (楼主) 3年前

你这样按位与出来的结果不对吧,只要 type 有 1 或者 8 都能匹配到

3年前 评论
AB (楼主) 3年前
AB (楼主) 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!