位運算解決多標籤問題【原創】

平常開發中常常用到一個酒店下有多個標籤好比酒店的風格特色有:無柱 場地方正 豪華 美食 天然採光 園林草坪 溫泉 景區周邊 水景 泳池 中式院落 西式裝修 少數民族 會場進車 高爾夫數據庫

咱們通常都會對其進行編號:設計

{
    '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);

好了,今天的分享就到這裏,明天見查詢

相關文章
相關標籤/搜索