使用位移解決多種客戶端顯示問題

現在有一個需求要解決,需求如下:

產品需要在不同的終端顯示,有PC, WAP, WX(微信), APP等4個終端,這些產品需要在上面4個終端中的一個或多箇中顯示,請問,數據庫怎麼設計。


最傳統的做法,在產品表中加一個字段,顯示類型 client_type varchar(100)

如果要在PC端顯示,就保存爲PC

如果要在PC、APP端顯示,就保存成PC,APP

如果要在PC、WAP、WX端顯示,就保存成PC,WAP,WX

等等...

如果要查詢在PC端顯示的產品列表,則SQL爲:select * from tb_product where client_type like '%PC%'

這種方式簡單明瞭,但是效率比較低


現在有一種,使用位移的做法,如下

首先定義PC=1、WAP=2、WX=4、APP=8

在產品表中加一個字段,顯示類型 client_type int

如果要在PC端顯示,就保存爲1(PC)

如果要在PC、APP端顯示,就保存成9(PC+APP)

如果要在PC、WAP、WX端顯示,就保存成7(PC+WAP+WX)

等等...

如果要查詢在PC端顯示的產品列表,則SQL爲:select * from tb_product where 1&client_type=1

如果要查詢在APP端顯示的產品列表,則SQL爲:select * from tb_product where 8&client_type=8

即:判斷是否顯示的方式爲:value&client_type == value

這種方式,使用的是位移,運算速度快,效率高。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章