日常開發中經常用到一個酒店下有多個標籤比如酒店的風格特點有:無柱
場地方正
豪華
美食
自然採光
園林草坪
溫泉
景區周邊
水景
泳池
中式院落
西式裝修
少數民族
會場進車
高爾夫
我們一般都會對其進行編號:
{
'1': 無柱,
'2': 場地方正,
'3': 豪華,
'4': 美食,
'5': 自然採光,
'6': 園林草坪,
'7': 溫泉,
'8': 景區周邊,
'9': 水景,
'10': 泳池,
'11': 中式院落,
'12': 西式裝修,
'13': 少數民族,
'14': 會場進車,
'15': 高爾夫
}
存放在資料庫時主要是存放該值的key值,如果一個酒店只有一個標籤是沒什麼問題的,但是如果一個酒店有多個標籤,並且又需要支援單個標籤也可以篩選出該酒店就需要用到位運算,那具體這個位運算怎麼設計呢?需要我們一起看看。
我們假設某個酒店存在 無柱
美食
泳池
三個標籤
這樣我們可以設計一個長度為15的二進位制數,滿足條件的位為1,不滿足的為0,那該酒店的二進位制數為 000001000001001
轉換為十進位制為 521
這樣我們存放到資料庫裡面的數值為 521
那這樣怎麼獲取該酒店是否有該標籤呢?
我們可以採用位運算的與(&)運算:兩個位都為1時,結果才為1
那如果我們要判斷無柱
這個標籤是否存在該酒店
首先獲取代表無柱
的二進位制數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);
好了,今天的分享就到這裡,明天見