MySQL-mysql 数据匹配的问题
比如数据库有一个字段 attr,存储的值是1,0,1,0,1
有个查询数据是 1,0,0,0,0
要求查询数据 where attr=1,0,0,0,0的时候 1,0,1,0,1也能匹配到。
举个现实的例子 一个酒店 支持 wifi 早餐 停车场 那么1代表支持 0代表不支持 则为1,1,1
当用户搜索支持wifi的时候 会产生 1,0,0 但是1,1,1肯能定匹配到
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
首先是数据库表设计的问题, 这个表设计 对于关系数据库来说, 1). 不易维护, 2). 不易扩展, 3). 增加了程序设计的难度.
针对你的问题来说, 我想可以用位运算来做,
比如 用attr='1,1,0,0,0'去匹配, 那么 用的二进制mask就是b'11000'.
针对你的字段attr '1,0,1,0,1', 首先去掉逗号, 并转为二进制, conv(replace(attr,',',''),2,10), 然后和maks做&运算, 结果不为0 表示匹配. 否则不匹配.
示例是这样:
mysql> select (conv(replace('1,0,1,0,1',',',''),2,10) & b'11000') <> 0 RESULT;
+--------+
| RESULT |
+--------+
| 1 |
+--------+
1 row in set (0.00 sec)