[靈性程式設計]這想要那也想要的需求解決,2^ n次方列舉法

AB發表於2021-05-28

設計資料庫欄位時,經常遇到的問題。
例如:貨幣型別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 協議》,轉載必須註明作者和本文連結

相關文章