find_in_set - 请教 mysql查询
问题描述
mysql 表中字段option_tag 存储的值格式(分号)为: 4:539;8:543;4:545;8:549通过 find_in_set() 可以查找到以逗号分隔的字符串。以分号分隔的 字符串 有什么函数直接能查询到 option 含有 539的所有值?

问题解答
回答1:sql语句:SELECT * FROM tableWHERE locate(’:539;’, CONCAT(options_tag, ’;’)) > 0
用like的方法逻辑上不严谨,如4:2539这种情况也会被like匹配,但不是想要的结果。
从设计方案考虑,如果是复杂的数据类型,建议存成json格式,mysql高版本直接内置了json解析、查询功能。
回答2:通过like或者正则即可。但是不建议将逻辑放在mysql中,造成数据库引擎压力过大,而且极度不安全。正确的做法应该是把整个字段的值取出来,作为字符串然后用语言比如php python nodejs之类的处理。
回答3:SELECT * FROM tableWHERE options_tag LIKE ’%539%’;
正如@小虫哥哥 所说,这是设计缺陷,这看起来是一个一对多或者多对多的关系,不应该用一个字段存起来,不仅查询效率低(在SQL里对字段进行运算有可能会使该字段的索引无法被使用),而且查询起来也不灵活。
回答4:like 匹配
回答5:like :539
回答6:我说这是设计缺陷有人赞同吗
回答7:like相似匹配
回答8:模糊查询研究下
相关文章:
1. javascript - 一排三个框,各个框的间距是15px,距离外面的白框间距也是15px,这个css怎么写?2. javascript - nodejs调用qiniu的第三方资源抓取,返回401 bad token,为什么3. html5 - javascript写业务有用到什么编程范式没?4. html5 - vue-cli 装好了 新建项目的好了,找不到项目是怎么回事?5. javascript - immutable配合react提升性能?6. javascript - vue 手机端项目在进入主页后 在进入子页面,直接按返回出现空白情况7. css3 - 微信前端页面遇到的transition过渡动画的bug8. javascript - jQuery post()方法,里面的请求串可以转换为GBK编码么?可以的话怎样转换?9. python3.x - python 中的maketrans在utf-8文件中该怎么使用10. mysql - C#连接数据库时一直这一句出问题int i = cmd.ExecuteNonQuery();

网公网安备