對於一些有限型別的多選,資料庫儲存使用中間表顯得比較累贅,但是把值或id拼成串來存又會使查詢統計不可用。這種情況下,可以採用二進位制的方式來處理。
提供者:北京網優通達網路技術****,致力於**優化
應用場景:
對有限型別進行多選,其中有限型別指永遠不會超過64個的選項。
比如:使用者註冊選擇感興趣的產品線。一共有28個產品線可供選擇。
基本原理:
整數的儲存是十進位制的,轉換成二進位制以後,現有計算機最大長度為64位,如果每位表示一種狀態,則最多可以表示64種狀態,即應用場景中分析的選項個數。每種狀態之間是互斥的,即只有1位為1,其他位都是0。在程式和資料庫操作中,都可以利用二進位制操作來簡化計算。
重要場景分析:
假設:plc=1(00000001), dcs=2(00000010),pac=4(00000100), pc-based=8(00001000), scada = 16(00010000)
1.使用者選擇其中三項plc,pac,scada,則資料儲存的值為:
plc | pac | scada = 1 | 4 | 16 = 00010101 = 21
2.查詢:選擇了pac的使用者,可能選擇了別的,也可能沒選別的
where [interest] & 4 = 4
3.查詢:同時選擇了pac和pc-based的使用者,可能選擇了別的,也可能沒選別的
where [interest] & (4 | 8) = 4| 8 即 where [interest] & 12 = 12
4.查詢:選擇了pac或pc-based的使用者
where [interest] & (4 | 8) > 0 即 where [interest] & 12 > 0
5.查詢:沒有選擇pac的使用者
where [interest] & 4 = 0
6.查詢:沒有選擇pac和plc的使用者,兩者都不選
where [interest] & (1 | 4) = 0 即 where [interest] & 5 = 0
7.查詢:沒有同時選擇pac和plc的使用者,沒有同時選擇兩項的人
where [interest] & (1 | 4) < 5 即 where [interest] & 5 < 5
8.查詢:只選擇了pac的使用者。
where [internet] = 4
二進位制的妙用
表示某個元素是否在集合中 因為二進位制每一位只有0和1兩種情況,所以二進位制每一位可以對應某個元素是否在這個集合中。整個二進位制數就構成了乙個集合,對應二進位制位為1的元素就在集合中,為0的就不在集合中。表示對乙個集合的每乙個元素是否進行某種操作 整個二進位制數表示對乙個集合整體進行的某種操作,對應...
二進位制和三進製的妙用
在it公司的筆試和面試中,總會出現那某些與進製有關的題目,現將一些常出現的進製用法 如下 先來思考幾個問題,並不難,各位大牛應能秒殺 1.小明是個賣蘋果的,小紅一次在小明那買n n 1024 個蘋果。小明每次都要數n個蘋果給小紅,唉,太麻煩了。於是小明想出了一種方法 他把蘋果分在10個袋子中,則無論...
二進位制 二進位制起源
現代通訊技術的基礎是二進位制編碼。早在1865年麥克斯韋總結出麥克斯韋方程組之前,美國人摩斯 morse 於1837年發明了摩斯電碼和有線電報。有線電報的出現,具有劃時代的意義 它讓人類獲得了一種全新的資訊傳遞方式,這種方式 看不見 摸不著 聽不到 完全不同於以往的信件 旗語 號角 烽火,這也是二進...