[灵性编程]这想要那也想要的需求解决,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 协议》,转载必须注明作者和本文链接
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 2
陈先生

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

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

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

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

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