phpデータベースフィールド多重化の基本原理と例
一、論理代数の基礎:1、数字は二進法で表しています。すべての出現可能な数は0と1の二つだけです。2,基本演算は「和」、「あるいは」、「非」の3種類だけです。演算と定義されています。(和で表現すると演算)0&0=0&1=0 1&0=1&1=1は0が一つあれば、結果は0と乗算が似ています。あるいは演算として定義されています。0=0=1=1=1=1=1は1があれば、結果は1です。足し算と似ています。二、論理演算例:0111101010101010101010101010101101111111111&1100000=1100000は、一般的に、数字のあるNビットの数値を取得するには、この数字を2のN-1乗(マスク)と演算するだけでよいと理解できる。三、データベースフィールドの定義:データテーブルでbinary_sampleを例に挙げます。create table binarysample(uid int unsigned not null、status int unsigned not null default 0、primy key(uid)、key i_s(status)engine=innodb;statusフィールドの定義:statusフィールドのデータタイプは32 bitの整数であり、できるだけ複数の属性を記憶するために、以下のように定義されています。以下のすべての「ビット」の説明順序は、低いから高い(右から左へ)順番で表します。0-2ビットはユーザ登録状態を表しています。000は新規登録が承認されていないことを示しています。登録が承認されていないことを示しています。010は、管理者100がスーパー管理者101が予約110を表しています。性別を表します。女性011は保留します。101は保留します。111マスクを保留します。もし私達がすべての男性ユーザーを調べたいなら、select*from binary。sample where status&b'111000'=b'00000'すべての管理者のユーザーを調べたいなら、select*from binarysample where status&b'111'=b'011';もし私達がすべての男性管理人のユーザーを調べたいなら、select*from binarysample where status&b'111111'=b'0011';もし私達がすべての非新規登録が承認されていないユーザーを調べたいなら、select*from binarysample where status&b'111'!=b'000'四、PHPプログラムを使ってこのような計算を行います。define(「USER_」NEW',0)///000 define("USER_"NORMAL",1)///001 define("USER_"ADVANNCE",2)////010 define("USER_"MANAGE",//011 define("USER_"SUPER",4)///100 define("USER_"MASK",//111 define(「GENDER_」UNKNOWN",0)///000000 define(「GENDER_」MALE",8)////00000 define(「GENDER_」FEMALE",9)///01000 define("GENDER_"MASK",56)///111000私達がすべての男性ユーザーを調べたいなら、$status=GENDER_MALE;$mark=GENDER_MASK;$sql="select*from binary_sample where status&$mark'=$status";すべての管理人のユーザーを調べたいならば、スタースターヒーター=USER_MANAGE$mark=USER_MASK;$sql="select*from binary_sample where status&$mark'=$status";もし私達がすべての男性管理人のユーザーを調べたいならば、$status=GENDER_MALE&USER_MANAGE$mark=GENDER_MASK&GENDER_MASK;$sql="select*from binary_sample where status&$mark'=$status";もし私達がすべての非新規登録が承認されていないユーザーを調べたいなら、$status=USER_NEW;$mark=USER_MASK;$sql="select*from binary_sample where status&${mask}!=$status";この類推によれば、各値の意味を定義しさえすれば、照会は基本的に決まっています。