84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
mysql 表中字段option_tag 存储的值格式(分号)为: 4:539;8:543;4:545;8:549通过 find_in_set() 可以查找到以逗号分隔的字符串。以分号分隔的 字符串 有什么函数直接能查询到 option 含有 539的所有值?
ringa_lee
sql语句:SELECT * FROM tableWHERE locate(':539;', CONCAT(options_tag, ';')) > 0
用like的方法逻辑上不严谨,如4:2539这种情况也会被like匹配,但不是想要的结果。
从设计方案考虑,如果是复杂的数据类型,建议存成json格式,mysql高版本直接内置了json解析、查询功能。
通过like或者正则即可。但是不建议将逻辑放在mysql中,造成数据库引擎压力过大,而且极度不安全。正确的做法应该是把整个字段的值取出来,作为字符串然后用语言比如php python nodejs之类的处理。
SELECT * FROM table WHERE options_tag LIKE '%539%';
正如@小虫哥哥 所说,这是设计缺陷,这看起来是一个一对多或者多对多的关系,不应该用一个字段存起来,不仅查询效率低(在SQL里对字段进行运算有可能会使该字段的索引无法被使用),而且查询起来也不灵活。
like 匹配
like :539
我说这是设计缺陷有人赞同吗
like相似匹配
模糊查询研究下
sql语句:
SELECT * FROM table
WHERE locate(':539;', CONCAT(options_tag, ';')) > 0
用like的方法逻辑上不严谨,如4:2539这种情况也会被like匹配,但不是想要的结果。
从设计方案考虑,如果是复杂的数据类型,建议存成json格式,mysql高版本直接内置了json解析、查询功能。
通过like或者正则即可。
但是不建议将逻辑放在mysql中,造成数据库引擎压力过大,而且极度不安全。
正确的做法应该是把整个字段的值取出来,作为字符串然后用语言比如php python nodejs之类的处理。
正如@小虫哥哥 所说,这是设计缺陷,这看起来是一个一对多或者多对多的关系,不应该用一个字段存起来,不仅查询效率低(在SQL里对字段进行运算有可能会使该字段的索引无法被使用),而且查询起来也不灵活。
like 匹配
like :539
我说这是设计缺陷有人赞同吗
like相似匹配
模糊
查询
研究下