使用位移解决多种客户端显示问题

现在有一个需求要解决,需求如下:

产品需要在不同的终端显示,有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

这种方式,使用的是位移,运算速度快,效率高。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值