日常開發中經常用到一個酒店下有多個標簽比如酒店的風格特點有: `場地方正 豪華 美食 自然採光 園林草坪 溫泉 景區周邊 水景 泳池 中式院落 西式裝修 少數民族 會場進車 高爾夫` 我們一般都會對其進行編號: 存放在資料庫時主要是存放該值的key值,如果一個酒店只有一個標簽是沒什麼問題的,但是如果 ...
日常開發中經常用到一個酒店下有多個標簽比如酒店的風格特點有:無柱
場地方正
豪華
美食
自然採光
園林草坪
溫泉
景區周邊
水景
泳池
中式院落
西式裝修
少數民族
會場進車
高爾夫
我們一般都會對其進行編號:
{
'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);
好了,今天的分享就到這裡,明天見