平常開發中常常用到一個酒店下有多個標籤好比酒店的風格特色有:無柱
場地方正
豪華
美食
天然採光
園林草坪
溫泉
景區周邊
水景
泳池
中式院落
西式裝修
少數民族
會場進車
高爾夫
數據庫
咱們通常都會對其進行編號:設計
{ '1': 無柱, '2': 場地方正, '3': 豪華, '4': 美食, '5': 天然採光, '6': 園林草坪, '7': 溫泉, '8': 景區周邊, '9': 水景, '10': 泳池, '11': 中式院落, '12': 西式裝修, '13': 少數民族, '14': 會場進車, '15': 高爾夫 }
存放在數據庫時主要是存放該值的key值,若是一個酒店只有一個標籤是沒什麼問題的,可是若是一個酒店有多個標籤,而且又須要支持單個標籤也能夠篩選出該酒店就須要用到位運算,那具體這個位運算怎麼設計呢?須要咱們一塊兒看看。code
咱們假設某個酒店存在 無柱
美食
泳池
三個標籤
這樣咱們能夠設計一個長度爲15的二進制數,知足條件的位爲1,不知足的爲0,那該酒店的二進制數爲 000001000001001
轉換爲十進制爲 521
這樣咱們存放到數據庫裏面的數值爲 521
開發
咱們能夠採用位運算的與(&)運算:兩個位都爲1時,結果才爲1class
那若是咱們要判斷無柱
這個標籤是否存在該酒店
首先獲取表明無柱
的二進制數000000000000001
,
而後轉換成10進製爲1,
最後咱們能夠經過 tags & 1
來判斷該酒店是否有無柱
這個標籤。二進制
數據庫查詢語句爲:數據
SELECT * from hotel_info WHERE (tags & 1); SELECT * from hotel_info WHERE (tags & 4); SELECT * from hotel_info WHERE (tags & 10);
好了,今天的分享就到這裏,明天見查詢