php 資料庫欄位複用的基本原理與樣本

來源:互聯網
上載者:User

一、邏輯代數基礎:
  1,數字用二進位表示,所有可能出現的數只有0和1兩個。
  2,基本運算只有“與”、“或”、“非”三種。
  與運算定義為:(用 & 表示與運算)
  0 & 0 = 0
  0 & 1 = 0
  1 & 0 = 0
  1 & 1 = 1
  可以簡單理解為:只要有一個0,結果就是0,和乘法類似。
  或運算定義為:(用 表示與運算)
  0 0 = 0
  0 1 = 1
  1 0 = 1
  1 1 = 1
  可以簡單理解為:只要有一個1,結果就是1,和加法類似。
  二、邏輯運算樣本:
  01111010101010101111111111111111 & 1100000 = 1100000
  一般可以理解為:
  如果要擷取一個數字某N位的數值,只需要將這個數字與2的N-1次方(掩碼)進行與運算即可。
  三、資料庫欄位定義:
  以資料表 binary_sample為例:
  create table binary_sample(
  uid int unsigned not null,
  status int unsigned not null default 0,
  primary key(uid),
  key i_s(status)
  )engine=innodb;
  status欄位定義:
  status欄位資料類型為32bit的整數,為了儘可能的儲存多個屬性,我們將其進行如下定義:
  以下所有“位”的描述順序按照從低到高(從右至左)順序表示。
  0-2位表示使用者註冊狀態:
  000 表示新註冊未被批准
  001 表示註冊被批准
  010 表示位進階使用者
  011 表示管理員
  100 表示超級管理員
  101 保留
  110 保留
  111 掩碼
  3-5位使用者性別:
  000 表示性別不確定
  001 表示性別為男
  010 表示性別為女
  011 保留
  100 保留
  101 保留
  110 保留
  111 掩碼
  如果我們要查詢所有 男使用者 則:
  select * from binary_sample where status & b'111000' = b'001000';
  如果我們要查詢所有 管理使用者 則:
  select * from binary_sample where status & b'111' = b'011';
  如果我們要查詢所有 男管理使用者 則:
  select * from binary_sample where status & b'111111' = b'001011';
  如果我們要查詢所有 非 新註冊未被批准使用者 則:
  select * from binary_sample where status & b'111' != b'000';
  四,使用PHP程式進行此類計算:
  define("USER_NEW",0);//000
  define("USER_NORMAL",1);//001
  define("USER_ADVANCE",2);//010
  define("USER_MANAGE",3);//011
  define("USER_SUPER",4);//100
  define("USER_MASK",7);//111
  define("GENDER_UNKNOWN",0);// 000000
  define("GENDER_MALE",8);// 001000
  define("GENDER_FEMALE",9);// 010000
  define("GENDER_MASK",56);// 111000
  如果我們要查詢所有 男使用者 則:
  $status=GENDER_MALE;
  $mask=GENDER_MASK;
  $sql="select * from binary_sample where status & ${mask}' = ${status}";
  如果我們要查詢所有 管理使用者 則:
  $status=USER_MANAGE;
  $mask=USER_MASK;
  $sql="select * from binary_sample where status & ${mask}' = ${status}";
  如果我們要查詢所有 男管理使用者 則:
  $status=GENDER_MALE & USER_MANAGE;
  $mask = GENDER_MASK & GENDER_MASK;
  $sql="select * from binary_sample where status & ${mask}' = ${status}";
  如果我們要查詢所有 非 新註冊未被批准使用者 則:
  $status = USER_NEW;
  $mask = USER_MASK;
  $sql="select * from binary_sample where status & ${mask} != ${status}";
  依此類推,只要定義好每個值的含義,查詢基本上就定了。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.