|
1,數(shù)字用二進(jìn)制表示,所有可能出現(xiàn)的數(shù)只有0和1兩個(gè)。
2,基本運(yùn)算只有“與”、“或”、“非”三種。
與運(yùn)算定義為:(用 & 表示與運(yùn)算)
0 & 0 = 0
0 & 1 = 0
1 & 0 = 0
1 & 1 = 1
可以簡(jiǎn)單理解為:只要有一個(gè)0,結(jié)果就是0,和乘法類(lèi)似。
或運(yùn)算定義為:(用 表示與運(yùn)算)
0 0 = 0
0 1 = 1
1 0 = 1
1 1 = 1
可以簡(jiǎn)單理解為:只要有一個(gè)1,結(jié)果就是1,和加法類(lèi)似。
二、邏輯運(yùn)算示例:
01111010101010101111111111111111 & 1100000 = 1100000
一般可以理解為:
如果要獲取一個(gè)數(shù)字某N位的數(shù)值,只需要將這個(gè)數(shù)字與2的N-1次方(掩碼)進(jìn)行與運(yùn)算即可。
三、數(shù)據(jù)庫(kù)字段定義:
以數(shù)據(jù)表 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字段數(shù)據(jù)類(lèi)型為32bit的整數(shù),為了盡可能的存儲(chǔ)多個(gè)屬性,我們將其進(jìn)行如下定義:
以下所有“位”的描述順序按照從低到高(從右到左)順序表示。
0-2位表示用戶(hù)注冊(cè)狀態(tài):
000 表示新注冊(cè)未被批準(zhǔn)
001 表示注冊(cè)被批準(zhǔn)
010 表示位高級(jí)用戶(hù)
011 表示管理員
100 表示超級(jí)管理員
101 保留
110 保留
111 掩碼
3-5位用戶(hù)性別:
000 表示性別不確定
001 表示性別為男
010 表示性別為女
011 保留
100 保留
101 保留
110 保留
111 掩碼
如果我們要查詢(xún)所有 男用戶(hù) 則:
select * from binary_sample where status & b'111000' = b'001000';
如果我們要查詢(xún)所有 管理員用戶(hù) 則:
select * from binary_sample where status & b'111' = b'011';
如果我們要查詢(xún)所有 男管理員用戶(hù) 則:
select * from binary_sample where status & b'111111' = b'001011';
如果我們要查詢(xún)所有 非 新注冊(cè)未被批準(zhǔn)用戶(hù) 則:
select * from binary_sample where status & b'111' != b'000';
四,使用php程序進(jìn)行此類(lèi)計(jì)算:
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
如果我們要查詢(xún)所有 男用戶(hù) 則:
$status=GENDER_MALE;
$mask=GENDER_MASK;
$sql="select * from binary_sample where status & ${mask}' = ${status}";
如果我們要查詢(xún)所有 管理員用戶(hù) 則:
$status=USER_MANAGE;
$mask=USER_MASK;
$sql="select * from binary_sample where status & ${mask}' = ${status}";
如果我們要查詢(xún)所有 男管理員用戶(hù) 則:
$status=GENDER_MALE & USER_MANAGE;
$mask = GENDER_MASK & GENDER_MASK;
$sql="select * from binary_sample where status & ${mask}' = ${status}";
如果我們要查詢(xún)所有 非 新注冊(cè)未被批準(zhǔn)用戶(hù) 則:
$status = USER_NEW;
$mask = USER_MASK;
$sql="select * from binary_sample where status & ${mask} != ${status}";
依此類(lèi)推,只要定義好每個(gè)值的含義,查詢(xún)基本上就定了。
php技術(shù):php 數(shù)據(jù)庫(kù)字段復(fù)用的基本原理與示例,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。